我可以创建一个数组并像这样初始化它:
int a[] = {10, 20, 30};
我如何创建一个std::vector和初始化它同样优雅?
我知道的最好的方法是:
std::vector<int> ints;
ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
有没有更好的办法?
我可以创建一个数组并像这样初始化它:
int a[] = {10, 20, 30};
我如何创建一个std::vector和初始化它同样优雅?
我知道的最好的方法是:
std::vector<int> ints;
ints.push_back(10);
ints.push_back(20);
ints.push_back(30);
有没有更好的办法?
当前回答
最简单的,符合人体工学的方法(c++ 11或更高版本):
auto my_ints = {1,2,3};
其他回答
B. Stroustrup在Prog. 11版的第464页的16.2.10 Selfreference中描述了一种很好的链式操作方法。朗。函数返回一个引用,这里修改为一个向量。这样你就可以像v.pb(1).pb(2).pb(3);但对于这样的小收获来说,工作量可能太大了。
#include <iostream>
#include <vector>
template<typename T>
class chain
{
private:
std::vector<T> _v;
public:
chain& pb(T a) {
_v.push_back(a);
return *this;
};
std::vector<T> get() { return _v; };
};
using namespace std;
int main(int argc, char const *argv[])
{
chain<int> v{};
v.pb(1).pb(2).pb(3);
for (auto& i : v.get()) {
cout << i << endl;
}
return 0;
}
1 2 3
如果数组是:
int arr[] = {1, 2, 3};
int len = (sizeof(arr)/sizeof(arr[0])); // finding length of array
vector < int > v;
v.assign(arr, arr+len); // assigning elements from array to vector
这里有很多很好的答案,但由于我在阅读这篇文章之前独立地得到了我自己的答案,我想无论如何我都要在这里抛出我的答案……
下面是我使用的一个方法,它将在编译器和平台上普遍工作:
创建一个结构体或类作为对象集合的容器。为<<定义运算符重载函数。
class MyObject;
struct MyObjectList
{
std::list<MyObject> objects;
MyObjectList& operator<<( const MyObject o )
{
objects.push_back( o );
return *this;
}
};
你可以创建以你的结构体作为参数的函数,例如:
someFunc( MyObjectList &objects );
然后,你可以调用这个函数,像这样:
someFunc( MyObjectList() << MyObject(1) << MyObject(2) << MyObject(3) );
这样,您就可以在一行代码中构建并将动态大小的对象集合传递给函数!
下面的方法可用于在c++中初始化vector。
Int arr[] = {1,3,5,6};v(arr, arr + sizeof(arr)/sizeof(arr[0])); 向量v < int >;v.push_back (1);v.push_back (2);v.push_back (3);等等 向量<int>v = {1,3,5,7};
第三种方法只允许在c++ 11以后使用。
c++ 11:
static const int a[] = {10, 20, 30};
vector<int> vec (begin(a), end(a));