Tim*_*upe 3 c++ optimization memory-management stl vector
我希望能够拥有某种类型的向量向量,例如:
vector<vector<MyStruct> > vecOfVec;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个MyStruct矢量,并填充它.
vector<MyStruct> someStructs;
// Populate it with data
Run Code Online (Sandbox Code Playgroud)
然后最后添加someStructs到vecOfVec;
vecOfVec.push_back(someStructs);
Run Code Online (Sandbox Code Playgroud)
我想要做的是避免在推送向量时使用复制构造函数调用.我知道这可以通过使用指针向量来实现,但我想尽可能避免这种情况.
我想到的一个策略似乎有效,但我不知道我是否过度设计了这个问题.
// Push back an empty vector
vecOfVec.push_back(vector<MyStruct>());
// Swap the empty with the filled vector (constant time)
vecOfVec.back().swap(someStructs);
Run Code Online (Sandbox Code Playgroud)
这似乎会添加我的矢量而不必做任何副本,但这似乎是编译器在优化过程中已经做的事情.
你认为这是一个好策略吗?
编辑:由于一些建议,简化了我的交换声明.
交换技巧与C++ 03一样好.在C++ 0x中,您将能够使用向量的移动构造函数来std::move以更明显的方式实现相同的操作.
另一个选择是不创建一个单独的vector<MyStruct>,而是让代码创建它接受它一个vector<MyStruct>&参数,并对其进行操作.然后,向外部添加一个新的空元素vector<vector<MyStruct>>,并传递对将填充它的代码的引用.
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |