如何使用预定义的计数在C++中初始化vector <int>数组?

rem*_*emo 8 c++ arrays stl initialization vector

对不起,我是C++中STL的新手.如何初始化10个向量指针的数组,每个向量指针指向5个int元素的向量.

我的代码片段如下:

vector<int>* neighbors = new vector<int>(5)[10];  // Error
Run Code Online (Sandbox Code Playgroud)

谢谢

jua*_*nza 17

这将创建一个包含10的向量vector<int>,每个向量包含5个元素:

std::vector<std::vector<int>> v(10, std::vector<int>(5));
Run Code Online (Sandbox Code Playgroud)

请注意,如果外部容器的大小是固定的,您可能希望使用std::array替代.请注意初始化更详细:

std::array<std::vector<int>, 10> v{{std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5),
                                    std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5), 
                                    std::vector<int>(5)
                                    }};
Run Code Online (Sandbox Code Playgroud)

另请注意,数组的内容是数组的一部分.它的大小由给定的sizeof大于vector版本,并且没有可用的O(1)移动或交换操作.An std::array类似于固定大小的自动存储平面阵列.

另请注意,正如@chris在注释中建议的那样,您可以选择默认初始化之后设置数组的元素,例如,std::fill如果它们都具有相同的值:

std::array<std::vector<int>, 10> v; // default construction
std::fill(v.begin(), v.end(), std::vector<int>(5));
Run Code Online (Sandbox Code Playgroud)

否则,您可以设置/修改单个元素:

v[0] = std::vector<int>(5); // replace default constructed vector with size 5 one
v[1].resize(42); // resize default constructed vector to 42
Run Code Online (Sandbox Code Playgroud)

等等.

  • 老实说,我更喜欢`std :: fill`来初始化. (3认同)