【问题标题】:how to assign values into a 2D vector like a 2D array如何将值分配给 2D 向量,如 2D 数组
【发布时间】:2015-04-07 12:30:59
【问题描述】:

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

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 中再次收到“大小为 8 的无效写入”。

【问题讨论】:

  • 使用 valgrind 的道具。首先修复它所识别的内容。
  • @WhozCraig 就是不接受我上面说的方法。它多次显示“大小为 8 的无效写入”。
  • @Whcrs 你的 for( x=myMatrix.mat[i][k];x&lt;=myMatrix.mat[i][k]+myMatrix.len[i][k];x++) 循环对我来说没有多大意义。
  • 我知道。很难理解。即使我不记得我做了什么:) 但我可以告诉你,当我使用我在原始消息中告诉的第一种方法时,我在 valgrind 中没有错误。我只记得,它是正确的。

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


【解决方案1】:

你可以使用 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);

【讨论】:

  • vec[1][10] 访问越界。
  • 否,因为 push_bask 会加 1。我试过了,因为回答它有效
【解决方案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;
}

【讨论】:

  • 它可以让我像二维数组一样赋值吗?
  • @Whcrs 它使您可以预先设置向量的大小。阅读链接的参考文档。
  • 我知道。而我现在做到了。 Valgrind 又疯了。
  • 谢谢你。我解决了。但是请继续关注,我想半小时后,我将不得不将这个struct 传递给项目中的另一个源文件。 extern 你知道的事情:))
猜你喜欢
  • 2013-08-28
  • 2017-11-15
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2020-03-21
  • 2016-10-05
相关资源
最近更新 更多