当你不想要它时,用零初始化一个 vector 不是浪费时间吗?
我试试这段代码:
#include <iostream>
#include <vector>
#include <array>
#define SIZE 10
int main()
{
#ifdef VECTOR
std::vector<unsigned> arr(SIZE);
#else
std::array<unsigned, SIZE> arr;
#endif // VECTOR
for (unsigned n : arr)
printf("%i ", n);
printf("\n");
return 0;
}
我得到了输出:
用 vector
$ g++ -std=c++11 -D VECTOR test.cpp -o test && ./test
0 0 0 0 0 0 0 0 0 0
用数组
g++ -std=c++11 test.cpp -o test && ./test
-129655920 32766 4196167 0 2 0 4196349 0 1136 0
我也尝试使用 clang++
那为什么是零呢?顺便问一下,我可以在不初始化的情况下声明一个 vector 吗?
最佳答案
更常见的声明 vector 的方式是不指定大小:
std::vector<unsigned> arr;
这不会为 vector 内容分配任何空间,也没有任何初始化开销。通常使用 .push_back()
等方法动态添加元素。如果你想分配内存,你可以使用 reserve()
:
arr.reserve(SIZE);
这不会初始化添加的元素,它们不会包含在 vector 的 size()
中,并且尝试读取它们是未定义的行为。比较一下
arr.resize(SIZE);
增长 vector 并初始化所有新元素。
另一方面,std::array
总是分配内存。它实现了大多数与 C 风格数组相同的行为,除了自动衰减到指针。这包括默认情况下不初始化元素。
关于c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775464/