Qt QStringList“;“索引超出范围”;
我试图在Qt QStringList“;“索引超出范围”;,qt,outofrangeexception,qstringlist,Qt,Outofrangeexception,Qstringlist,我试图在QStringList中反转单词。下面是到目前为止的代码,但我不断得到一个“索引超出范围”错误。从错误看来,我试图使用超出范围的数据,但无法解决我的问题 QString reversed; QStringList reversedlist; QStringlist list = input.split(" "); for (int i=0;i<list.length(); ++1) reversedlist[i] = list[list.length() -1 -i]; r
QStringList
中反转单词。下面是到目前为止的代码,但我不断得到一个“索引超出范围”错误。从错误看来,我试图使用超出范围的数据,但无法解决我的问题
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(" ");`
QString反转;
QStringList反向列表;
QStringlist list=input.split(“”);
对于(int i=0;i您的reversedList最初为空。您必须实际附加这些项,如下所示:
reversedlist.push_back (list[list.length () - 1 - i]);
当然,试图通过reversedList[i]
访问不存在的项是不起作用的,会抛出索引超出范围错误。您得到的索引超出范围,因为QStringList reversedList中没有sting。因此,当您的代码到达行reversedList[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;
QString反转;
QStringList反向列表;
QString input=“123 456 789 000”;
QStringList list=input.split(“”);
对于@ThorngardSO指出的(int i=0;i,reversedlist
最初为空,您试图访问循环代码中的无效索引。您应该使用以下函数之一向列表中添加值:
- STL兼容函数(在列表的末尾插入值)
- STL兼容函数(在列表的开头插入值)
- Qt功能(Qt替代品用于
推回
)
- Qt功能(Qt替代品适用于
前推
)
如您所见,prepend()
在列表的开头插入元素,这就是为什么它使列表的反转非常简单:
for (int i = 0; i < list.length(); ++i) {
reversedlist.prepend(list[i]);
}
for(int i=0;i
另外,请注意,循环中有一个输入错误:它应该是++i
,而不是++1'QString reversed;QStringList reversedlist;QStringList list=input.split(“”);for(int i=0;我可以这样更改for循环:for(int i=0;i它是做什么的?++1
prepend
和push_front
需要在每次插入时向前移动数组中的所有其他元素(即O(n));您刚刚做了O(n^2)一个操作,即O(n)如果操作正确。@MatteoItalia from:QList在其内部缓冲区的两侧预先分配了额外的空间,以允许列表两端的快速增长uh jeez,出于某种原因,我在考虑QVector。对您的帖子进行一些编辑(例如,添加此引号以强调这与QVector和/或std::vector不同),这样我就可以逆转我的投票。@MatteoItalia添加了“STL兼容”的备注,以避免误解。感谢您指出这一点。@ThorngarSO-工作非常出色,非常感谢您的帮助,非常感谢!