如何在一行中将 cin 中的值转换为 vector.push_back()

How to take value from cin into vector.push_back() in one line?

本文关键字:转换 vector back push 一行 cin      更新时间:2023-10-16

我可以在一行中执行此操作吗?

int temp;
cin >> temp;
vtr.push_back(temp);

对于奖励积分,有没有办法也包含 for 循环替代方案

 for(int i=0; i < 5; i++){
    int temp;
    cin >> temp;
    vtr.push_back(temp);
}

需要注意的是,我不能做类似while(cin >> myInt)的事情,因为读入文件有多行,但我一次只想读取 5 行。我也不知道我怎么能像 vtr.push_back(cin >> ??? )

你可以

使用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;
}

我可以在一行中执行此操作吗?

不是直接的,但你可以包装它:

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 循环替代方案

如果使用 C++11 或更高版本,则可以将 std::copy_n()std::istream_iterator 一起使用,并std::back_inserter

std::copy_n(std::istream_iterator<int>(std::cin), 5, std::back_inserter(vtr));

否则,只需使用手动循环:

for (int i = 0; i < 5; ++i) readValue(cin, vtr);

除了另一个答案中显示的迭代器解决方案之外,您还可以在向量的末尾添加五个元素,然后从流中读取新的值:

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 */ }