我必须输入整数并对它们进行操作。每个整数将由它们之间的空格分隔,并且未定义整数数,
因此输入可能是1 23 45 80或21 32。
我厌倦了使用cin,它没有用,因为它在太空中打破了。
答案 0 :(得分:4)
int x;
while(cin>>x)
{
store the number one by one
}
//process
只需这样做。将数字存储在数组中。 或者你可以这样做 -
string s;
getline(cin,s);
std::stringstream myss;
myss<<s;
std::string t;
int x;
std::vector<int> v;
while(std::getline(myss,t,' '))
{
if(std::stringstream(t)>>x)
{
// store x in an vector.
v.push_back(x);
}
让我们详细说明这个想法 -
什么是流?非正式地,字符串是字符的集合,流是用于操纵移动数据的工具。
什么是 stringstream ?一个对strings进行操作的类。该类的对象使用包含一系列字符的字符串缓冲区。可以使用成员
string
直接将此字符序列作为str
对象进行访问。第一个代码如何工作?
cin
是类istream
的对象,表示标准输入流。(从中获取输入)它返回对此处重载的相同流的引用istream
。cin
用于格式化字符串提取。可以进行类似的测试 如果(cin) //然后做点什么 如果true
可以,则为cin
;如果文件结束或遇到错误,则为false
。当您从文件中读取时,它可以很容易地使用。第二个代码如何工作?简单地说就是这样。到达&#39; &#39;你在
string
放了一整行。然后,您使用stringstream
类来获取所需的值(此处为int x)。现在当你从它中提取时,你只是提取一个int值。之后,它再次进入getline以获取下一个数字。当空格分隔数字时,每个getline都会得到一个包含该数字的字符串。 getline的工作方式如下 - getline(cin,str,delim) 从cin中提取字符并将它们存储到str中,直到找到分隔字符delim(或换行符,&#39; \ n&#39;其中delim不在那里[表示getline(cin,str)
]),如果到达文件末尾或者在输入操作期间发生其他错误,则提取也会停止。 如果找到定界符,则将其提取并丢弃,即不存储定界符,并且在其之后开始下一个输入操作。 每个提取的字符都附加到字符串中。
现在这是第二个代码的工作原理。查看参考手册以了解更多信息。
现在让我们看一下vector
s。
vector是c ++中的容器类型。接下来的问题可能是 conatiner ?
容器:容器是存储其他对象集合的持有者对象。简而言之,您可以在此容器中保留任何内容,无论是您定义的int还是对象,还是结构类型,任何东西。这是灵活性使用模板。名称暗示的模板只是让我们对它的工作有所了解 - 是的,它是您可以用来代替它的任何类型的模板。
vector :还有其他容器,如list,deque等,但vector与其他容器完全不同。向量非常有效,它必须从末尾(后端)插入或删除元素,随机访问元素 - 向量提供随机访问,如
v[i]
等。这是向量的基础。它比数组更好,因为它会在推送元素时动态增加。要了解如何使用它,请查看参考手册。