矢量矢量的初始化非常慢

sys*_*ult 3 c++ performance initialization vector

我有一个向量的向量,我试图初始化它如下:

vector<vector<float> > matrix(numberOfRows, vector<float> (numberOfCols));
Run Code Online (Sandbox Code Playgroud)

但这行约为0.89,其中numberOfRows和numberOfCols为:

const uint32_t numRows = 10000;
const uint32_t numCols = 20000;
Run Code Online (Sandbox Code Playgroud)

而使用以下代码初始化动态数组需要0.04秒来执行:

float **matrix = new float*[numberOfRows];
for (size_t i = 0; i < numberOfRows; ++i)
    matrix[i] = new float[numberOfCols];
Run Code Online (Sandbox Code Playgroud)

我做错了有没有更快的方法来初始化该向量?

编辑:

至于问题:

我使用g ++ - 4.5来测试使用默认标准的O3优化级别.

Bo *_*son 9

不同之处在于向量初始化为零,而动态数组则不是.拥有2亿个价值,这是值得注意的.

您可以选择延迟矢量行的初始化,直到您有实际值来分配它们,方法是不扩展初始化中的列.

  • @systemsfault - 如果需要,可以通过为每行调用`reserve(numberOfCols)`来为每行保留空间.如果从其他容器中分配每一行,它将自行修复.这取决于你如何使用矩阵. (4认同)
  • 如果有一个向量构造函数可以将容量作为参数而不实际创建任何元素,那将是很好的.这样,可以构建这样的向量向量,其中外向量由空向量组成,每个向量已经具有必要的容量. (3认同)