我可以在一行中完成吗?
int temp;
cin >> temp;
vtr.push_back(temp);
对于奖励积分,还有一种方法可以包含for-loop替代
for(int i=0; i < 5; i++){
int temp;
cin >> temp;
vtr.push_back(temp);
}
警告我不能像while(cin >> myInt)
这样做,因为读入文件有多行,但我只想一次阅读5行。我也不知道如何用像vtr.push_back(cin >> ??? )
答案 0 :(得分:3)
您可以使用std::istream_iterator<>
。这是一个从stdin:
std::vector
的示例
#include <iostream>
#include <vector>
int main(int argc, char **argv) {
std::vector<int> vec{
std::istream_iterator<int>(std::cin),
std::istream_iterator<int>()};
for (int i : vec) {
std::cout << i << '\n';
}
return 0;
}
如果您愿意,可以在循环中使用push_back
。
#include <iostream>
#include <vector>
int main(int argc, char **argv) {
std::vector<int> vec;
for (std::istream_iterator<int> p{std::cin}, e; p != e; ++p) {
vec.push_back(*p);
}
for (int i : vec) {
std::cout << i << '\n';
}
return 0;
}
答案 1 :(得分:2)
我可以在一行中完成吗?
不是直接的,但你可以包装它:
template<typename ContainerType>
void readValue(std::istream &in, ContainerType &container)
{
ContainerType::value_type temp;
if (in >> temp)
container.push_back(temp);
}
然后这是一个单行电话:
readValue(cin, vtr);
对于奖励积分,还有一种方法可以包含for-loop替代
如果您使用的是C ++ 11或更高版本,则可以std::copy_n()
使用std::istream_iterator
和std::back_inserter
使用{{3}}:
std::copy_n(std::istream_iterator<int>(std::cin), 5, std::back_inserter(vtr));
否则,只需使用手动循环:
for (int i = 0; i < 5; ++i) readValue(cin, vtr);
答案 2 :(得分:1)
除了另一个答案中显示的迭代器解决方案之外,您可以在向量的末尾添加五个元素,然后从流中读取新的值:
auto n = vtr.size();
vtr.resize(n + 5);
if (std::cin >> vtr[n] >> vtr[n+1] >> vtr[n+2] >> vtr[n+3] >> vtr[n+4])
{ }
else
{ /* report error */ }