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值.它抑制了移动语义,这可能非常昂贵. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |