繁体   English   中英

C++如何在二维向量初始化中创建不同的向量?

[英]How does C++ create different vectors in two dimensional vector initialization?

我看到几个地方( 例如)可以像这样初始化 2-dim 向量

vector<vector<int> > vec(3, vector<int>(2, 0));

我在想的是这段代码被评估为以下

auto tmp = vector<int>(2, 0);
vector<vector<int> > vec(3, tmp);

如果我是正确的,那么vec的 3 个元素都指的是同一个参考。 这意味着修改vec[0][1]也会修改vec[1][1]

如果我错了,C++ 如何使vec中每个元素的初始化成为不同的参考?

默认情况下,几乎所有 C++ 容器(包括std::vector )都通过复制获取其 arguments ,因此:

auto tmp = vector<int>(2, 0);
vector<vector<int> > vec(3, tmp);

现在,向量创建了三个完全不相关的 'tmp' 副本并将其存储在自身内部。


但是请注意,您可以通过使用std::reference_wrapper尝试执行此操作,如下所示: std::vector<std::reference_wrapper<std::vector<int>>>

例子:

#include <vector>
#include <functional>
#include <iostream>

int main()
{
    auto tmp = std::vector<int>(2, 0);
    std::vector<std::reference_wrapper<std::vector<int>>> a(3, std::ref(tmp));
    a[0].get()[0] = 2;
    a[1].get()[1] = 10;
    a[2].get()[0] = 30;
    std::cout << "'tmp' contains: ";
    for (auto const& elem : tmp)
        std::cout << elem << " ";
}

Output:
'tmp' 包含:30 10

构造函数参考

3) 使用具有值 value 的元素的 count 个副本构造容器。

没有对tmp的引用,只是副本。 所有单个向量都是不同的,修改一个向量不会修改任何其他向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM