【问题标题】:List in C++ by category按类别列出 C++
【发布时间】:2012-07-03 09:32:23
【问题描述】:

我正在创建一个这样的列表: QList<Type> types[LastType]; 然后我调整我的列表: types[SomeType].reserve(count); 稍后,当我尝试添加类型时,我会这样做: types[SomeType].append(newType);

它给了我一个关于 operator[] 的断言失败。那么,只是我还是我不应该这样做?有什么我想念的吗?这就是错误消息的内容:http://i.imgur.com/LnDNV.png。删除 .reserve 并不能解决问题。

【问题讨论】:

  • 你真的应该阅读Qt Container Classes
  • @Styne666 我已经解决了这个问题,但谢谢你我会这样做的。

标签: c++ qt list


【解决方案1】:

因此,假设 QList 确实是 vector 在引擎盖下,reserve 是错误的调用。您并没有像您说的那样调整列表的大小,而是要求它为 至少 size 更多元素分配空间。是的,它分配了更多空间,但不会改变列表的 size

在任何情况下,对该函数的调用都不会影响向量中包含的元素,也不会影响向量大小(为此,请参阅 vector::resize 或 vector::erase,它们会修改向量大小和内容)。

听起来你想在这里resize

【讨论】:

  • QList 中没有调整大小的方法,因此我将使用 QVector,无论如何,谢谢。 +rep(在 7 分钟内,如它所说
  • 假设append 的行为类似于push_back,那么reserve OP 想要的...
  • 好吧,愚蠢的我,我应该这样做,抱歉这么愚蠢的问题。与 QVector 一起工作正常
  • @ildjarn:是的,我不确定。我在operator[] 上看到了异常,并且不确定append 是否真的抛出了错误(通过内部调用operator[])或者错误是否发生在其他地方......尽管再次阅读它似乎已经足够清楚了。我认为我假设 QList == vector<T> 是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2014-03-14
相关资源
最近更新 更多