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

c – 为什么这里不允许将矢量附加到另一个矢量?

发布时间:2020-12-16 10:34:16 所属栏目:百科 来源:网络整理
导读:我使用方法(c)将向量追加到另一个向量: a.insert(a.end(),b.begin(),b.end()); 它可以工作,但是如果b来自成员函数,那么它将不再起作用了 vectorpoint const line::returnAVectorOfPoints() const{ vectorpoint pts; // Do something return pts;} 然后这次,
我使用方法(c)将向量追加到另一个向量:

a.insert(a.end(),b.begin(),b.end());

它可以工作,但是如果b来自成员函数,那么它将不再起作用了

vector<point> const line::returnAVectorOfPoints() const
{
    vector<point> pts;
    // Do something
    return pts;
}

然后这次,当我尝试(像这样)

a.insert(a.end(),returnAVectorOfPoints().begin(),returnAVectorOfPoints().end());

我有一个segv.任何想法在这里出了什么问题?

解决方法

你在line :: returnAVectorOfPoints()中按值返回一个向量,所以这两个迭代器是不兼容的:

returnAVectorOfPoints().begin(),returnAVectorOfPoints().end()

它们指向两个不同的临时对象.

您可以将返回值存储在临时变量中:

auto v = returnAVectorOfPoints();
a.insert(a.end(),v.begin(),v.end());

另外,请注意,您不应返回const值.它抑制了移动语义,这可能非常昂贵.

(编辑:李大同)

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

    推荐文章
      热点阅读