从cin中读取整型序列并将其存储在vector中
Read a sequence of ints from cin and store them in a vector
这是我用std::cin
读取整数并将它们存储在一个向量中所做的:
int number;
vector<int>ivec;
while (cin>>number)
{
ivec.push_back(number);
}
for (auto v: ivec){
cout << v;
}
然后,我遇到了如何停止输入整数并移动到下一个打印向量的过程的问题。
这取决于所使用的终端和精确的机制变化相当大,但通常,键入Ctrl+D (Linux)或Ctrl+Z (Windows)将导致沿管道传输文件结束"信号",导致EOF位被设置在cin
上,因此下一个cin >> number
尝试失败。
这将打破循环。
很方便的是,如果您从文件重定向输入运行可执行文件,也会发生相同的情况。这才是关键所在
您发布的代码从cin
读取数字,只要它成功。有两种方法可以使它停止成功:如果您输入的不是数字,读取数据仍然成功,但将其转换为数字失败。这使cin
进入坏状态。它可以从使用clear
方法中恢复。另一种方法是使从cin
读取字符失败(例如用作输入的文件的结尾)。这将使cin
进入failed
状态。通常,从失败状态恢复是不可能的。
要产生,当您在键盘上输入数据时,您不能再读取文件末尾的状态,必须使用特定于操作系统的方法(如Control-D或Control-Z)。这是程序调用的最终结果。
如果你需要一种方式让用户发出信号:"请继续,但让我稍后输入其他内容",最干净的方式可能是逐行读取cin
并使用strtol
或stringstream
解析输入,并比较一个神奇的停止标志(例如空行,"结束")以退出循环。
你可以这样做
#include <vector>
#include <iterator>
//...
vector<int> ivec( std::istream_iterator<int>( std::cin ),
std::istream_iterator<int>() );
for ( auto v: ivec ) std::cout << v << ' ';
std::cout << std::endl;
在Windows下你必须按组合键Ctrl + z
和UNIX系统下的Ctrl + d
或者你可以引入一个哨兵。在这种情况下,循环看起来像
int number;
const int sentinel = SOME_VALUE;
for ( std::cin >> number && number != sentinel ) vec.push_back( number );
请找到一个简单的解决方案来解决你的问题,如果你发现这个解决方案有任何问题,请告诉我。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> va;
int x;
while ( cin >> x ) {
va.push_back(x);
if ( cin.get() == 'n' ) break;
}
//Vector output
for ( int i = 0; i < va.size(); i++ ) {
cout << va[i] <<" ";
}
return 0;
}
相关文章:
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- std::vector move 而不是交换到空 vector 并释放存储
- 将可变参数模板类存储到 std::vector 中
- 在 std::vector<无符号字符中存储任意数据的方法>
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- 将数据从 std::Vector 存储到 Eigen::Vector 时出错
- 如何将自定义特征张量类存储到 std::vector 中?
- 如何在 std::vector 中存储来自 std:<short>:vector <uint8_t>的数据
- 如何在OpenCV中存储部分轮廓点喜欢新矢量中的左侧,该类型为<vector<vector<Point>>
- 如何从 Pyhon 端对存储在 std::vector 中的对象进行持久更改,作为 std::shared_ptr
- 使用 std::vector<char> 作为异构记录的存储是否安全?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 从 CSV 读取并存储在 Vector 中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 使用运算符重载添加存储在 vector 中的类对象
- 如何在文件中节省空间地存储和检索 std::vector<int> 值
- 将十六进制值存储到 std::vector<无符号字符中>
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- Boost::p roperty_tree:在XML解析器中使用std::vector<>在一个键中存储多个值