2

我正在分析一个旧的遗留 C++ 应用程序。

我看到有很多vector<class>var 声明:

vector<someClass> myVec1;
vector<someClass> myVec2;
vector<someClass> myVec3;

这个向量可以增长很多。在代码中我还发现有时会这样做:

myVec2 = myVec1;

此分配操作实际上会复制数据,如果向量很大,则操作很慢。

有没有办法myVec2只分配给一个引用,myVec1而不必重构依赖这些变量的所有代码(即动态分配它们)?

请注意,分配后myVec1不再使用。

4

4 回答 4

7

你可以试试myVec2.swap(myVec1);,应该很快。既然你不再关心myVec1,那么现在包含myVec2.

于 2013-05-24T20:25:11.640 回答
5

你可以像这样声明一个引用变量:

vector<someClass> myVec1;
vector<someClass>& myVec2 = myVec1;

但是,如果myVec1超出范围myVec2将是不好的。此外,如果您使用的是 c++11 编译器,您的向量可以被“移动”而不是复制。

在不了解您的用例的情况下很难说出您需要做什么。

于 2013-05-24T20:27:59.380 回答
3

如果您不需要重新分配向量变量,则可以使用 C++ 参考,如下所示:

vector<someClass> myVec1;
vector<someClass>& myVec2 =  myVec1;

(这就像将常量指针分配给 myVec2 但保留“按值”变量的语义)

更多关于 C++ 中的引用和可能的陷阱在这里

于 2013-05-24T20:27:04.080 回答
0

你为什么想要?如果要引用myVect1,请按名称引用它myVect1

复制向量非常有用:它可以用作快照或从处于有用状态的向量初始化另一个。

无论如何,复制几兆字节的数据不再那么慢了。最坏的毫秒数。

于 2013-05-24T20:24:36.957 回答