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

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/
但由于解释是“将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*/
}

你可以做到这一点作为一个单行,但实际上我怀疑你想要更加小心地填充临时.所以我把两条线分开了.

(编辑:李大同)

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

    推荐文章
      热点阅读