QStringList"索引超出范围"

时间:2016-02-06 11:06:45

标签: qt outofrangeexception qstringlist

我正试图扭转QStringList内的字词。下面是到目前为止的代码,但我继续使用#34;索引超出范围"错误。从错误来看,我似乎正在尝试使用超出范围的数据,但无法弄清楚我的问题。

QString reversed;
QStringList reversedlist;
QStringlist list = input.split(" ");

for (int i=0;i<list.length(); ++1)
  reversedlist[i] = list[list.length() -1 -i];

reversed = reversedlist.join(" ");`

由于

3 个答案:

答案 0 :(得分:2)

正如@ThorngardSO所指出的那样,reversedlist最初是空的,并且您正试图访问循环代码中的无效索引。您应该使用以下功能之一将值添加到列表中:

  • STL- 兼容功能push_back()(在列表的结尾处插入值)
  • STL- 兼容功能push_front()(在列表的开头处插入值)
  • Qt function append()(Q {替代push_back
  • Qt function prepend()(Q {替代push_front

如您所见,prepend()会在列表的开头处插入元素,这就是为什么它使列表的反转变得非常简单:

for (int i = 0; i < list.length(); ++i) {
    reversedlist.prepend(list[i]);
}

另请注意,您的循环中存在拼写错误:它应该是++i而不是++1

答案 1 :(得分:1)

您的reversedList最初为空。您必须实际附加项目,如下所示:

reversedlist.push_back (list[list.length () - 1 - i]);

当然,尝试通过reversedList[i]访问不存在的项目不起作用,并抛出索引输出范围错误。

答案 2 :(得分:0)

你的索引超出了范围,因为QStringList反向列表中没有任何刺痛。因此,当您的代码到达反向列表[0]时,它会抛出“索引超出范围”错误。您可以使用[0]读取值并且无法分配。 如果要将值分配给QStringList的特定索引。

QString reversed;
    QStringList reversedlist;

    QString input="123 456 789 000";
    QStringList list = input.split(" ");

    for (int i=0;i<list.length(); ++i){
      //value to particular index
      reversedlist.insert(i,list[list.length() -1 -i]);
    }

    reversed = reversedlist.join(" ");

    qDebug() << reversed;