Seb*_*ias -4 c++ integer input
我必须输入整数并对每个整数进行运算。每个整数之间会用空格分隔,并且整数的个数没有定义,
因此输入可能是 1 23 45 80 或 21 32。
我厌倦了使用 cin,它不起作用,因为在空间上它会损坏。
int x;
while(cin>>x)
{
store the number one by one
}
//process
Run Code Online (Sandbox Code Playgroud)
只需这样做即可。将数字存储在数组中。或者你可以这样做-
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);
}
Run Code Online (Sandbox Code Playgroud)
让我们详细阐述一下这个想法——
什么是流?通俗地说,字符串是字符的集合,流是操纵移动数据的工具。
什么是字符串流?对字符串进行操作的类。此类的对象使用包含字符序列的字符串缓冲区。
string可以使用 member直接将这个字符序列作为对象进行访问str。第一个代码是如何工作的?
cin是代表标准输入流的类的对象istream。(从其中获取输入)它返回对此处重载的同一流的引用istream。cin用于格式化字符串提取。可以进行类似 if (cin) //then do some 的测试。这将是true如果cin没问题并且false文件结束或遇到错误。如果您正在读取文件,则可以轻松使用它。第二个代码如何工作?简单来说就是这样。到 ' 为止,您将整行放入
string. 然后您使用该类stringstream来获取所需的值(此处为 int x)。现在,当您从中提取时,您只是提取一个 int 值。之后,它再次转到 getline 来获取下一个数字。由于空格分隔数字,因此每个 getline 都会获取包含该数字的字符串。getline 的工作原理如下 - getline(cin,str,delim) 从 cin 中提取字符并将它们存储到 str 中,直到找到分隔符 delim(或换行符,'\n',其中 delim 不存在 [意味着getline(cin,str)]) ,如果到达文件结尾或输入操作期间发生其他错误,提取也会停止。如果找到分隔符,则将其提取并丢弃,即不存储它,并且将在其之后开始下一个输入操作。每个提取的字符都附加到字符串中。
现在这就是第二个代码的工作原理。查看参考手册以了解更多详细信息。
现在让我们来了解一下vectors。
Vector是C++中的一种容器类型。下一个问题可能是conatiner是什么?
容器:容器是存储其他对象集合的容器对象。简而言之,您可以在此容器中保存任何内容,无论是 int 还是您定义的对象或结构类型,任何内容。这是使用模板实现的灵活性。顾名思义,模板只是让我们了解它的工作 - 是的,它是您可以用来代替它的任何类型的模板。
矢量:还有其他容器,如列表、双端队列等,但矢量与其他容器有很大不同。Vector非常高效,它必须从末端(后端)插入或删除元素并随机访问元素-向量提供了轻松的随机访问等。
v[i]这是向量的基础。它比数组更好,因为它随着您推送元素而动态增加。要了解如何使用它,请查看参考手册。