c – 使用push_back将向量放入向量>
发布时间:2020-12-16 10:03:18 所属栏目:百科 来源:网络整理
导读:我有一个std :: vector vector double我想填写一个功能. 我需要在我的程序中稍后为某些计算存储一些3维坐标. 我的问题是如果我这样做: //in classdefinitionstd::vectorstd::vectordouble data; myFunc() { std::vectordouble temp; temp.push_back(1); tem
我有一个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/ 我认为如果变量作为参考传递是没有多大意义的,因为它们可以像我的情况一样只在有限的范围内有效. 解决方法
如果数据类型为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*/ } 你可以做到这一点作为一个单行,但实际上我怀疑你想要更加小心地填充临时.所以我把两条线分开了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |