【问题标题】:how to emplace_back (append) in vector without declaring variables..?如何在不声明变量的情况下将 emplace_back(追加)放在向量中..?
【发布时间】:2021-12-11 05:13:57
【问题描述】:

如果输入的数量作为第一个输入。
如果我需要将它们存储在向量中
我可以通过创建一个变量并使用我可以将它附加到向量中的变量轻松地做到这一点
我很想知道,有没有其他方法可以让我不必使用变量..

输入

4
1 5 3 2

向量如何获取输入

vector<int>vec;
for(int i=0;i<n;i++)
{
    int x;
    cin>>x;    // any idea to remove using a variable here..?
    vec.emplace_back(x);
}

数组如何接受输入

int array[n];
for(int i=0;i<n;i++)
cin>>array[i];

【问题讨论】:

  • 注意:在int array[n]; 中,n 必须是标准 C++ 中的编译时间常数。文件中的 4 不符合编译时间常数。
  • int get_int(istream&amp; in) { int x; if (!(in &gt;&gt; x)) throw runtime_error("input error"); return x; } 然后vec.emplace_back(get_int(cin));

标签: c++ vector stl c++17


【解决方案1】:

或使用 STL 算法(适用于 C++03):

vector<int> vec;
vec.reserve(n); // good practice to reduce reallocation of memory
std::copy_n(std::istream_iterator<int>{std::cin}, n, std::back_inserter(vec));

【讨论】:

    【解决方案2】:

    是的,只需这样做:

    std::cin >> vec.emplace_back();
    

    C++17 中vector::emplace_back() 的返回类型不再是void。相反,它返回对插入元素的引用。所以vec.emplace_back()会默认构造一个元素并返回它的引用。

    【讨论】:

    • 如果operator&gt;&gt; 失败,那么您的向量中会留下一个未分配的元素。
    猜你喜欢
    • 2020-05-21
    • 1970-01-01
    • 2014-06-20
    • 2023-01-20
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多