目前我必须多次使用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);
有没有办法只使用vector.push_back()
一次,只是将多个值传递给向量?
答案 0 :(得分:57)
尝试将数组传递给vector:
int arr[] = {2,5,8,11,14};
std::vector<int> TestVector(arr, arr+5);
你总是可以调用std::vector::assign将数组赋给vector,调用std :: vector :: insert来添加多个数组。
如果您使用C ++ 11,可以尝试:
std::vector<int> v{2,5,8,11,14};
或者
std::vector<int> v = {2,5,8,11,14};
答案 1 :(得分:53)
您也可以使用vector::insert。
std::vector<int> v;
int a[5] = {2, 5, 8, 11, 14};
v.insert(v.end(), a, a+5);
修改强>
当然,在实际编程中你应该使用:
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
答案 2 :(得分:30)
您可以使用初始化列表执行此操作:
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 });
答案 3 :(得分:3)
您还可以使用Boost.Assignment:
const list<int> primes = list_of(2)(3)(5)(7)(11);
vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
答案 4 :(得分:3)
使用 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;
}
答案 5 :(得分:2)
由于 c++17
,您可以使用以下方法:
#include <iostream>
#include <vector>
using namespace std;
vector<int> vec;
template<typename... T>
void vecPush(const T& ... x) {
(vec.push_back(x), ...);
}
int main() {
vecPush(4, 10, 4);
for(const auto& a : vec)
cout << a << " ";
return 0;
}
答案 6 :(得分:0)
在运行时,您只需使用vector.push_back({2, 5, 8, 11, 14})
答案 7 :(得分:0)
这是三种最直接的方法:
1)从初始化列表初始化:
std::vector<int> TestVector = {2,5,8,11,14};
2)从初始化列表中分配:
std::vector<int> TestVector;
TestVector.assign( {2,5,8,11,14} ); // overwrites TestVector
3)在给定的位置插入一个初始化器列表:
std::vector<int> TestVector;
...
TestVector.insert(end(TestVector), {2,5,8,11,14} ); // preserves previous elements
答案 8 :(得分:0)
现在 (c++17
) 很简单:
auto const pusher([](auto& v) noexcept
{
return [&](auto&& ...e)
{
(
(
v.push_back(std::forward<decltype(e)>(e))
),
...
);
};
}
);
pusher(TestVector)(2, 5, 8, 11, 14);
答案 9 :(得分:-1)
是的,您可以:
vector<int>TestVector;`
for(int i=0;i<5;i++)
{
TestVector.push_back(2+3*i);
}