我使用方法(c ++)将向量追加到另一个向量:
a.insert(a.end(), b.begin(), b.end());
Run Code Online (Sandbox Code Playgroud)
它可以工作,但如果b
从成员函数获得,那么它将不再起作用,比如说
vector<point> const line::returnAVectorOfPoints() const
{
vector<point> pts;
// Do something
return pts;
}
Run Code Online (Sandbox Code Playgroud)
然后这次,当我尝试(像这样)
a.insert(a.end(), returnAVectorOfPoints().begin(), returnAVectorOfPoints().end());
Run Code Online (Sandbox Code Playgroud)
我有一个segv.任何想法在这里出了什么问题?
您将按值返回向量line::returnAVectorOfPoints()
,因此这两个迭代器不兼容:
returnAVectorOfPoints().begin(), returnAVectorOfPoints().end()
Run Code Online (Sandbox Code Playgroud)
它们指向两个不同的临时对象.
您可以将返回值存储在临时变量中:
auto v = returnAVectorOfPoints();
a.insert(a.end(), v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
另外,请注意您不应该返回const
值.它抑制了移动语义,这可能非常昂贵.