我正在分析一个旧的遗留C ++应用程序。
我看到有很多vector<class>
var声明:
vector<someClass> myVec1;
vector<someClass> myVec2;
vector<someClass> myVec3;
这个载体可以长得很多。在代码中我还发现有时它已经完成了:
myVec2 = myVec1;
此分配操作实际上会复制数据,如果矢量很大,则操作很慢。
有没有办法只分配myVec2
myVec1
的引用而不必重构所有依赖这些变量的代码(即动态分配它们)?
请注意,在不再使用作业myVec1
之后。
答案 0 :(得分:7)
您可以尝试myVec2.swap(myVec1);
,这应该非常快。由于您不再关心myVec1
,因此它现在包含myVec2
的原始内容并不重要。
答案 1 :(得分:5)
您可以声明一个这样的引用变量:
vector<someClass> myVec1;
vector<someClass>& myVec2 = myVec1;
但是,如果myVec1
超出范围myVec2
则会很糟糕。
此外,如果您使用的是c ++ 11编译器,您的矢量可以“移动”而不是复制。
很难说在不知道用例的情况下需要做什么。
答案 2 :(得分:3)
如果您不需要重新分配矢量变量,可以使用C ++引用,如下所示:
vector<someClass> myVec1;
vector<someClass>& myVec2 = myVec1;
(这就像分配指向myVec2的常量指针但保留“by-value”变量的语义一样)
更多关于C ++中的引用和可能的陷阱here。
答案 3 :(得分:0)
你为什么要这样?如果您想引用myVect1
,请使用名称myVect1
引用它。
复制矢量非常有用:它可以用作快照或从有用状态中的另一个初始化另一个。
无论如何,复制几兆字节的数据并不是那么慢。最糟糕的是毫秒。