如何将值赋值到二维向量中,如二维数组

how to assign values into a 2D vector like a 2D array

有办法吗?目前我这样使用:

for( i=0;i<PU_number;i++)
{
    for( j=0;j<=time_slots;j++)
        myMatrix.tempVec.push_back(0.0);
    myMatrix.value.push_back(myMatrix.tempVec);
    myMatrix.tempVec.clear();
}

但是,它对我没有用。有时我需要更改此向量中的特定地址。喜欢 myMatrix.tempVec[1][4]。当我这样做时:

myMatrix.value[i][j]=value;

它破坏了内存,我得到了 SIGABRTSIGSESV 和很多类似的东西。当我这样做时,valgrind 也会发疯。但是我需要一个合适的方法来做到这一点。

编辑:我按照你们说的做了:

myMatrix.value.resize(PU_number);
for( i=0;i<PU_number;i++)
    myMatrix.value[i].resize(time_slots);

然后:

for( i=0;i<PU_number;i++)
{
    for( j=0;j<time_slots;j++)
    {
        for( k=0;k<number_of_packets;k++)
        {
            double r=((double) rand() / (RAND_MAX));
                for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)
                myMatrix.value[i][x]=r;

        }
    }
}

然后我在 valgrind 中再次得到 "Invalid write of size 8"。

有一个 std::vector::resize() 函数,可用于在通过索引访问任何值之前正确设置 矩阵 的维度。

这是一个小样本

myMatrix.resize(PU_number);
for( i=0;i<PU_number;i++) {
    myMatrix[i].resize(time_slots);
    for( j=0;j<=time_slots;j++)
        myMatrix[i][j] = 0.0;
}

您可以使用 std::vector > 喜欢这里:

#include <vector>
#include <iostream>
int main()
{
  std::vector<std::vector<int> > vec;
  vec.resize(10);
  for (unsigned int i = 0 ; i < vec.size(); ++i)
    {
      vec[i].resize(10);
    }
  vec[1][4] = 3;
  vec[1].push_back(5)
  std::cout << "vec[1][4] = " << vec[1][4] << std::endl;
  std::cout << "vec[1][10] = " << vec[1][10] << std::endl;
  return (0);
}

我创建了一个大小为 10 的向量,其中包含其他大小为 10 的向量; 请注意,您必须使用 resize 来获得带有 std::vector 的尺寸 > 但如果您想添加尺寸,您可以使用 vec[i].push_back(5);