加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 避免使用向量向量进行复制

发布时间:2020-12-16 10:26:57 所属栏目:百科 来源:网络整理
导读:我希望能够拥有某种类型的向量向量,例如: vectorvectorMyStruct vecOfVec; 然后我创建一个MyStruct矢量,并填充它. vectorMyStruct someStructs;// Populate it with data 然后最后添加someStructs到vecOfVec; vecOfVec.push_back(someStructs); 我想要做的
我希望能够拥有某种类型的向量向量,例如:

vector<vector<MyStruct> > vecOfVec;

然后我创建一个MyStruct矢量,并填充它.

vector<MyStruct> someStructs;
// Populate it with data

然后最后添加someStructs到vecOfVec;

vecOfVec.push_back(someStructs);

我想要做的是避免在推送向量时使用复制构造函数调用.我知道这可以通过使用指针向量来实现,但我想尽可能避免这种情况.

我想到的一个策略似乎有效,但我不知道我是否过度设计了这个问题.

// Push back an empty vector
vecOfVec.push_back(vector<MyStruct>());

// Swap the empty with the filled vector (constant time)
vecOfVec.back().swap(someStructs);

这似乎会添加我的矢量而不必做任何副本,但这似乎是编译器在优化过程中已经做的事情.

你认为这是一个好策略吗?

编辑:由于一些建议,简化了我的交换声明.

解决方法

交换技巧与C 03一样好.在C 0x中,你将能够通过std :: move使用向量的移动构造函数以更明显的方式实现相同的功能.

另一个选择是不创建单独的向量< MyStruct>,而是让创建它的代码接受一个向量< MyStruct>&论证,并对其进行操作.然后,向外部向量< vector< MyStruct>>添加一个新的空元素,并传递对将填充它的代码的引用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读