我想问我如何才能快速,不复制元素反转数组,这将始终只由2 std::vector组成。CGAL_Polyline也是一个包含点的向量。
目前我正在做这样的反向(目前工作,但我不知道这是否是一个正确的方式):
std::vector<CGAL_Polyline> m[2]; //array to reverse
std::vector<CGAL_Polyline> m_[2]{ m[1], m[0] };
m[0] = m_[0];
m[1] = m_[1];
这不起作用,为什么?
std::vector<CGAL_Polyline> m[2]; //array to reverse
std::reverse(m.begin(), m.end());
是否有其他方法来翻转两个向量的顺序?我不需要反转向量中元素的顺序。
使用std::swap
:
std::vector<CGAL_Polyline> m[2];
...
std::swap(m[0], m[1]);
这将移动vector的内容而不复制(c++ 11及更高版本)。在此之前,允许复制)。
如果在c++ 11之前(如果是这种情况,升级你的编译器!)你可以使用std::vector::swap
:
std::vector<CGAL_Polyline> m[2];
...
m[0].swap(m[1]);
因为它保证是常数。