我很难弄清楚如何修复此错误。我到处寻找,似乎无法找到解决方案。
我的程序是使用向量向量的键/值对算法。它接受一个键和值,然后将值添加到矢量矢量中位置“key”处的矢量。我使用vPos和vNeg作为向量的向量,并根据密钥是正还是负来使用每个。
size只返回向量向量中'key'位置的序列大小。
数据返回指向位置'key'指定的序列中第一个元素的指针。
insert为位置'key'的序列添加一个新值。
我认为我的私有变量可能没有正确初始化,但我已经尝试了所有可以提出的所有内容,所以感谢任何帮助。
#include <algorithm>
#include <list>
#include <vector>
using namespace std;
class key_value_sequences {
public:
int size(int key) const{
if (key < 0){
return vNeg.at(-key).size();
}
return vPos.at(key).size();
}
const int* data(int key) const{
if (key < 0){
if (vNeg.at(-key).size()==0) return nullptr;
return vNeg.at(-key).data();
}
if (vPos.at(key).size() == 0) return nullptr;
return vPos.at(key).data();
}
void insert(int key, int value){
if (key < 0){
vNeg.at(-key).push_back(value);
}
else{
vPos.at(key).push_back(value);
}
}
private:
vector<vector<int>> vPos;
vector<vector<int>> vNeg;
}; // class key_value_sequences
#endif // A3_HPP
答案 0 :(得分:0)
您致电vPos.at(N)
,但您从未在vPos
中添加任何内容。错误消息是正确的:您正在索引超出向量的末尾。
你可以这样做:
if (key >= vPos.size()) vPos.resize(key + 1);
vPos.at(key).push_back(value);
然后您知道key
是vPos
中的有效索引。