C++ 如何从int//c+的未知数的直线构造向量+;

C++ 如何从int//c+的未知数的直线构造向量+;,c++,C++,通常输入的数量是给定的,我可以使用for循环完成,但不在那里: 我试图从一行整数中构造一个向量,但我只知道整数的数目不能超过100。 有两行输入 如果我做了一个无限循环的CIN,当它到达一行的末尾或输入的末尾时,我怎么能打破它?< p>你可以考虑把整个行作为字符串来读: std::string line; std::getline (istream,name); 然后将该字符串拆分为向量(示例): std::向量拆分(std::string const&str) { 使用名称空间std; 使用

通常输入的数量是给定的,我可以使用for循环完成,但不在那里:

我试图从一行整数中构造一个向量,但我只知道整数的数目不能超过100。 有两行输入


如果我做了一个无限循环的CIN,当它到达一行的末尾或输入的末尾时,我怎么能打破它?

< p>你可以考虑把整个行作为字符串来读:

std::string line;
std::getline (istream,name);
然后将该字符串拆分为向量(示例):

std::向量拆分(std::string const&str)
{
使用名称空间std;
使用名称空间boost;
std::矢量结果;
标记器tok(str);
for(标记器::迭代器beg=tok.begin();beg!=tok.end();++beg){
结果:后侵位(std::stoi(*beg));
}
返回结果;
}

事实上,如果你仔细阅读问题,每行的整数数都是给定的

下一行包含一个整数p(0 ≤ P ≤ n) 首先,接着是p个不同的整数a1, a 2, ..., a p(1) ≤ a我 ≤ n) 。这些整数表示小X可以通过的级别的索引。下一行包含小Y可以以相同格式传递的级别。假设级别从1到n进行编号

p=每行上的整数数

请查看以下代码,这些代码已接受了关于代码力的代码判决:

#include<iostream> 
#include<set> 
#include<iterator> 


int main(){

    int N;
    std::cin>>N;

    std::set<int> uniqueNumbers;

    int t1, t2;
    int x;

    std::cin>>t1;
    for(int i=0;i<t1;i++){
        std::cin>>x;
        uniqueNumbers.insert(x);
    }
    
    std::cin>>t2;
    for(int i=0;i<t2;i++){
        std::cin>>x;
        uniqueNumbers.insert(x);
    }

    std::cout<< ((uniqueNumbers.size()==N) ? "I become the guy." : "Oh, my keyboard!");

    return 0;
}
#包括
#包括
#包括
int main(){
int N;
标准:cin>>N;
std::设置唯一编号;
int t1,t2;
int x;
标准:cin>>t1;
对于(int i=0;i>x;
唯一编号。插入(x);
}
std::cin>>t2;
对于(int i=0;i>x;
唯一编号。插入(x);
}

在我看来,输入值的数量是给定的:“下一行包含一个整数p(0 ≤ P ≤ n) 首先,然后是p个不同的整数……下一行包含小Y可以以相同格式传递的级别。”因此,从这一行开始,你将有一个
p
整数的向量。并且还会有一行相同格式的向量。哦,糟糕,你是对的。但是我的技术问题可能吗?@Arghantyl是的,可能。只需先将这一行读入
std::string
,然后将其分配给
std::istringstream
,然后读取de>int
s从循环中开始,直到没有任何内容可供阅读。谢谢。你如何快速找到其他编码器解决方案?我尝试了很多次。我刚刚编码了它。我的用户名是adepak7。查看屏幕快照哦,好的。我以为你在查看某人的帐户时,就像我尝试过很多次一样:)这不是针对你的。注意:
set
对于这个问题来说可能是杀伤力过大,最终比筛选算法慢。
n
不能超过100,因此101个布尔的数组(使布尔的索引与原始1级数保持一致)。当你阅读
n
时,将1设置为
n
真。当你分析一个可以击败的关卡时,将该关卡的布尔设置为假。如果数组中有任何真值,游戏将无法完成。使用该集合,你可以进行许多O(log(n))查找,并对
集合的大小与数组的多个O(1)进行一次O(1)测试查找和2 O(n)次迭代(一次用于初始化,一次用于测试)@Arghantyl使用类似的技巧。或者简单地使用
std::istringstream
,例如:
std::vector split(std::string const&str){std::vector results;std::istringstream iss(str);int num;while(iss>>num)results.push_-back(num)}返回结果;
#include<iostream> 
#include<set> 
#include<iterator> 


int main(){

    int N;
    std::cin>>N;

    std::set<int> uniqueNumbers;

    int t1, t2;
    int x;

    std::cin>>t1;
    for(int i=0;i<t1;i++){
        std::cin>>x;
        uniqueNumbers.insert(x);
    }
    
    std::cin>>t2;
    for(int i=0;i<t2;i++){
        std::cin>>x;
        uniqueNumbers.insert(x);
    }

    std::cout<< ((uniqueNumbers.size()==N) ? "I become the guy." : "Oh, my keyboard!");

    return 0;
}