以下代码中使用vector的错误是什么


class Solution {
public:
vector<int> decompressRLElist(vector<int>& nums) {
vector<int> pusher;
for(int i = 0; i<nums.size(); i+=2){
pusher.push_back(nums.at(i*nums.at(i+1)));
}
return pusher;
}
}

我认为向量一开始是空的。因此,使用push_back向其中插入元素应该没有问题

terminate called after throwing an instance of 'std::out_of_range'
what():  vector::_M_range_check: __n (which is 8) >= this->size() (which is 4)

首先,在这一行

pusher.push_back(nums.at(i*nums.at(i+1)));

你不知道A[i+1]会有什么数字,这里是nums.at(i+1),它会乘以i。假设您的i = 5size = 10A[i + 1] = 6,那么pusher.push_back(nums.at(5*6))将自动超出范围,为5*6=30,而size = 10的大小。

其次,如果你想访问循环中的i + 1索引,你必须考虑,循环终止条件关闭1。

for(int i = 0; i<nums.size() - 1; i+=2)

但这对你来说是行不通的。因为循环中的代码是完全有缺陷的。由于你没有提到你想做什么,所以我不能告诉你解决方案。

相关内容

最新更新