如何一次将多个int传递到向量中?

Ell*_*ott 50 c++ vector push-back c++11

目前我必须vector.push_back()多次使用.

我目前使用的代码是

  std::vector<int> TestVector;
  TestVector.push_back(2);
  TestVector.push_back(5);
  TestVector.push_back(8);
  TestVector.push_back(11);
  TestVector.push_back(14);
Run Code Online (Sandbox Code Playgroud)

有没有办法只使用vector.push_back()一次,只是将多个值传递给向量?

bil*_*llz 59

尝试将数组传递给vector:

int arr[] = {2,5,8,11,14};
std::vector<int> TestVector(arr, arr+5);
Run Code Online (Sandbox Code Playgroud)

你总是可以调用std :: vector :: assign来将数组赋值给vector,调用std :: vector :: insert来添加多个数组.

如果您使用C++ 11,您可以尝试:

std::vector<int> v{2,5,8,11,14};
Run Code Online (Sandbox Code Playgroud)

要么

 std::vector<int> v = {2,5,8,11,14};
Run Code Online (Sandbox Code Playgroud)

  • 但是如果你需要在初始化之后传递多个值*呢?没有很多push_back调用我们怎么做呢? (4认同)

sas*_*alm 54

您还可以使用vector :: insert.

std::vector<int> v;
int a[5] = {2, 5, 8, 11, 14};

v.insert(v.end(), a, a+5);
Run Code Online (Sandbox Code Playgroud)

编辑:

当然,在实际编程中你应该使用:

v.insert(v.end(), a, a+(sizeof(a)/sizeof(a[0])));  // C++03
v.insert(v.end(), std::begin(a), std::end(a));     // C++11
Run Code Online (Sandbox Code Playgroud)

  • 在C++ 11中,有更好的解决方案`std :: end(a)`可用. (11认同)

Kos*_*iek 40

您可以使用初始化列表执行此操作:

std::vector<unsigned int> array;

// First argument is an iterator to the element BEFORE which you will insert:
// In this case, you will insert before the end() iterator, which means appending value
// at the end of the vector.
array.insert(array.end(), { 1, 2, 3, 4, 5, 6 });
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个被接受的答案,因为它确实适用于非空载体. (3认同)
  • 与已接受的答案相比,我更喜欢这个答案,因为它是一句简单的话,很适合,因为它是一个微不足道的用例 (2认同)
  • 我更喜欢这个答案,因为它不仅限于初始化。我正在寻找一种解决方案,以在向量初始化并包含数据后添加多个新元素。 (2认同)

Li *_*Kui 5

使用vector::insert (const_iterator position, initializer_list il); http://www.cplusplus.com/reference/vector/vector/insert/

#include <iostream>
#include <vector>

int main() {
  std::vector<int> vec;
  vec.insert(vec.end(),{1,2,3,4});
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 您的回答对 Kosiek 的回答没有贡献 (7认同)

alf*_*lfC 5

这是三种最直接的方法:

1) 从初始化列表初始化:

std::vector<int> TestVector = {2,5,8,11,14};
Run Code Online (Sandbox Code Playgroud)

2) 从初始值设定项列表分配:

std::vector<int> TestVector;
TestVector.assign( {2,5,8,11,14} ); // overwrites TestVector
Run Code Online (Sandbox Code Playgroud)

3) 在给定点插入初始化列表:

std::vector<int> TestVector;
...
TestVector.insert(end(TestVector), {2,5,8,11,14} ); // preserves previous elements
Run Code Online (Sandbox Code Playgroud)