C++ 在C+中创建指向另一个元素的向量+;
下午好 如果不复制std::vector,我似乎无法复制它。 我需要创建一个指向另一个std::vector的向量,而不复制每个值 如果我写C++ 在C+中创建指向另一个元素的向量+;,c++,windows,visual-studio,vector,C++,Windows,Visual Studio,Vector,下午好 如果不复制std::vector,我似乎无法复制它。 我需要创建一个指向另一个std::vector的向量,而不复制每个值 如果我写 vector_1 = vector_0; 在监视窗口中,&vector_1和&vector_0具有完全不同的内存地址 与&vector\u 1[0]和&vector\u 0[0]相同,因此我理解此操作复制向量 但是,当我尝试编写&vector_1[0]=&vector_0[0]或 &vector\u 1=&vector\u 0 我得到了错误 错误C210
vector_1 = vector_0;
在监视窗口中,&vector_1
和&vector_0
具有完全不同的内存地址
与&vector\u 1[0]
和&vector\u 0[0]
相同,因此我理解此操作复制向量
但是,当我尝试编写&vector_1[0]=&vector_0[0]代码>或
&vector\u 1=&vector\u 0代码>
我得到了错误
错误C2106'=':左操作数必须是l值
我还试着用这种方法创建一个向量:
std::vector vector_1(vector_0[0],vector_0.size())
,但&向量_1
和&向量_0
和&向量_1[0]
和&向量_0[0]
显示不同的内存地址,因此它似乎再次复制元素
谢谢,您可以创建对向量的引用
std::vector<T> & vector_1 = vector_0;
std::vector&vector_1=vector_0;
这样,vector_1
将是vector_0
的别名,地址相同,所有元素都相同,不会发生复制
编辑
如果您想让vector\u 0
和vector\u 1
共享同一个向量的所有权,但成为独立对象,请使用共享的ptr
,如回答中所述。您可以创建向量的引用
std::vector<T> & vector_1 = vector_0;
std::vector&vector_1=vector_0;
这样,vector\u 1
将是vector\u 0
,具有相同地址和所有元素相同,不进行复制
编辑
如果您想让vector\u 0
和vector\u 1
共享同一个向量的所有权,但成为独立的对象,请使用共享的ptr
,如回答中所述。如果您需要y
与x
是同一个向量,请将其作为参考:
std::vector<int> x = {1,2,3,4,5};
std::vector<int> & y = x;
assert(std::addressof(x) == std::addressof(y));
如果您需要y
来共享x
的所有权,请将它们都设置为std::shared\u ptr
:
auto x = std::make_shared<std::vector<int>>({1,2,3,4,5});
auto y = x;
assert(x.get() == y.get());
如果需要将y
作为与x
相同的向量,请将其作为参考:
std::vector<int> x = {1,2,3,4,5};
std::vector<int> & y = x;
assert(std::addressof(x) == std::addressof(y));
如果您需要y
来共享x
的所有权,请将它们都设置为std::shared\u ptr
:
auto x = std::make_shared<std::vector<int>>({1,2,3,4,5});
auto y = x;
assert(x.get() == y.get());
std::vector
不支持共享其状态。事实上,没有任何类型支持将其地址分配给@François,其他任何类也不支持。也许您需要一个std::shared\u ptr
。为什么需要这个?你就不能把它传递给/创建一个对向量的引用吗?auto&vector\u 1=vector\u 0代码>应该工作吗?std::vector
不支持共享其状态。事实上,没有任何类型支持将其地址分配给@François,其他任何类也不支持。也许您需要一个std::shared\u ptr
。为什么需要这个?你就不能把它传递给/创建一个对向量的引用吗?auto&vector\u 1=vector\u 0代码>应该工作吗?