如何将值分配到2D矢量(如2D阵列)中

时间:2015-02-07 11:15:29

标签: c++ arrays c++11 vector variable-assignment

反正有吗?目前我用的是这样的:

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;

        }
    }
}

我得到了#34;无效的写入大小8&#34;再次在valgrind。

2 个答案:

答案 0 :(得分:2)

在通过索引访问任何值之前,可以使用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;
}

答案 1 :(得分:1)

你可以使用std :: vector&gt; 像这里:

#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&gt;的大小。但是如果你想添加一个大小,你可以使用vec [i] .push_back(5);