如何将值分配到类似2D阵列的2D向量中

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

本文关键字:2D 阵列 向量 分配      更新时间:2023-10-16

有什么可以做的吗?目前我这样使用:

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();
}

然而,它对我没有用处。有时我需要更改这个向量中的特定地址。如CCD_ 1。当我这样做的时候:

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

它破坏了内存,我得到了SIGABRTSIGSESV和很多类似的东西。当我这么做的时候,勇气也会变得疯狂。但我需要一个合适的方法

编辑:我做了你们说的:

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又收到了"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);