我有一个std :: vector< vector< double>>我想填写一个功能.
我需要在我的程序中稍后为某些计算存储一些3维坐标.
我的问题是如果我这样做:
//in classdefinition
std::vector<std::vector<double>> data;
myFunc()
{
std::vector<double> temp;
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);
data.push_back(temp);
temp.clear();
//new data
temp.push_back(2);
temp.push_back(3);
temp.push_back(4);
data.push_back(temp);
}
清除和重新填充temp会影响数据中的值吗?
我已经找到了这个http://www.cplusplus.com/reference/vector/vector/push_back/
但由于解释是“将val的内容复制(或移动)到新元素”.我不知道该怎么想.对我来说,这听起来像是一个矛盾.
我认为如果变量作为参考传递是没有多大意义的,因为它们可以像我的情况一样只在有限的范围内有效.
我的假设是对的吗?
解决方法:
如果数据类型为std :: vector< std :: vector< double>>那你很好:将采用临时值的副本;所以你在使用它作为push_back参数之后,你可以随意使用temp.
但是,如果你对矢量的分配器搞砸了,那么你可能需要更加小心.
使用安置(参见emplace_back)可以避免不必要的深层复制:
// First row of data
{
std::vector<double> temp = {1, 2, 3}; /*ain't C++11 brilliant?*/
data.emplace_back(std::move(temp)); /*do not use temp after this line -
use scope blocks so you're not tempted*/
}
你可以做到这一点作为一个单行,但实际上我怀疑你想要更加小心地填充临时.所以我把两条线分开了.
标签:c,stdvector 来源: https://codeday.me/bug/20190727/1554744.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。