我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
清除和重新填充temp会影响数据中的值吗?
我已经找到了这个http://www.cplusplus.com/reference/vector/vector/push_back/, 但由于解释是"将val的内容复制(或移动)到新元素." 我不知道该怎么想.对我来说,这听起来像是一个矛盾.
我认为如果变量作为参考传递是没有多大意义的,因为它们可以像我的情况一样只在有限的范围内有效.我的假设是对的吗?
如果data是类型的std::vector<std::vector<double>>,那么你会感觉良好:一个值副本的temp将采取; 所以temp在你用它作为push_back论据之后,你可以随心所欲地做.
但是,如果你对矢量的分配器搞砸了,那么你可能需要更加小心.
使用安置(请参阅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*/
}
Run Code Online (Sandbox Code Playgroud)
你可以做到这一点作为一个单行,但实际上我怀疑你想要temp更多的照顾.所以我把两条线分开了.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |