【问题标题】:Vector subscript out of range multidimensional vector向量下标超出范围多维向量
【发布时间】:2015-12-18 20:13:53
【问题描述】:

我正在开发 PLY 文件阅读器(带有顶点和面位置信息的 txt 文件)。它由标题、顶点位置、面信息组成。

标题

-1 -1 -1 // x y z 坐标

3 1 2 3 // 这个面由 3 个顶点组成 - 1,2,3

然后我用 OpenGL 绘制它。

我让它与数组一起工作,现在我想使用向量容器来节省价值。因为我不必在编译期间知道大小。

我初始化我的两个向量:

vector<string> ply_file;
vector< vector<float> > vertex_list;

使用 ply_file 一切正常,但是当我尝试使用此代码写入 vertex_list 时:

int j = 0;  
for(int i=first_vertex_row-1;i<first_vertex_row+vertex_number-1;i++)
{       
    std::stringstream ss(ply_file[i]); 
    ss >> vertex_list[j][0] >> vertex_list[j][1] >> vertex_list[j][2]; // x,y,z     
    j++;
}

但我得到调试断言失败:向量下标超出范围。

我知道我写错了,但我无法让它工作。 是否可以使用字符串流将其写入多维向量?如果可以,如何实现?

【问题讨论】:

  • 断言发生时,ij的值是多少?是否在各个向量的范围内?
  • 使“它”对维向量起作用(通过一个小代码示例),一切都会变得清晰。
  • 您没有向我们展示您使用vector::push_backvector::insertvector::resize 等设置向量的大小。现在,您声明了两个空向量,然后使用它们显示代码如果它们填充了数据。这不是一个完整的例子。
  • 哎呀,我只在这些行中使用 vertex_list。我认为第二个示例足以用于数据写入。所以:std::stringstream ss(ply_file[i]); ss >> ...不会将数据推送到向量中?

标签: c++ vector multidimensional-array containers


【解决方案1】:

vector&lt; vector&lt;float&gt; &gt; vertex_list; 创建一个空向量。当您尝试使用

向其中插入值时
ss >> vertex_list[j][0] >> vertex_list[j][1] >> vertex_list[j][2];

所有这些索引都超出了向量的范围。为了像这样向向量添加值,您需要将其构造为所需的大小。对于二维向量,其形式为

std::vector<std::vector<some_type> some_name(rows, std::vector<some_type>(columns, value));

【讨论】:

  • 是的!这正是我所缺少的:-)。 “价值”应该包含什么?
  • @ToKra 你可以选择任何东西,但对于数字类型,我使用 0 作为默认值。
  • 谢谢,现在可以了。我在 main 之前使用它: std::vector > vertex_list(vertex_number, std::vector(3, 0));在主要我使用调整大小: vertex_list.resize(vertex_number, vector(3));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多