我有一个代码块,我声明了四个向量,初始化其中两个。然后我有两个for循环,我将元素添加到未初始化的向量。最后,我将一个向量的所有元素重新分配给另一个向量。
但是在做这些时我得到了这个错误 - “矢量下标超出范围”。我正在对我做错的载体进行任何操作吗?
我的代码:
int main()
{
std::vector<int> K;
K.insert(K.begin(),0);
std::vector<int> tempK;
std::vector<int> S;
S.insert(S.begin(),0);
std::vector<int> tempS;
int n;
float exptd = 0;
float SD = 0;
std::cout<<"How many steps: ";
std::cin >> n;
for (int j= 1; j<=n; j++) {
for (int i=1; i<=K.size(); i++) {
if (K[i] == 0) {
tempK.push_back(4); tempK.push_back(6);
tempS.push_back(K[i]+4); tempS.push_back(K[i] +6);
}
else if (K[i] == 1) { tempK.push_back(6); tempK.push_back(8);
tempS.push_back( K[i]+6); tempS.push_back(K[i] +8);
}
else if (K[i] == 2) {
tempK.push_back(7); tempK.push_back(9);
tempS.push_back( K[i]+7); tempS.push_back(K[i] +9);
}
else if (K[i] == 3) {
tempK.push_back(4); tempK.push_back(8);
tempS.push_back( K[i]+4); tempS.push_back(K[i] +8);
}
else if (K[i] == 4) {
tempK.push_back(3); tempK.push_back(9); tempK.push_back(0);
tempS.push_back( K[i]+3); tempS.push_back( K[i] +9);
tempS.push_back(K[i] +0);
}
else if (K[i] == 6) {
tempK.push_back(1); tempK.push_back(7); tempK.push_back(0);
tempS.push_back( K[i]+1); tempS.push_back( K[i] +7);
tempS.push_back(K[i] +0);
}
else if (K[i] == 7) {
tempK.push_back(2); tempK.push_back(6);
tempS.push_back( K[i]+2); tempS.push_back(K[i] +6);
}
else if (K[i] == 8) {
tempK.push_back(1); tempK.push_back(3);
tempS.push_back( K[i]+1); tempS.push_back(K[i] +3);
}
else if (K[i] == 9) {
tempK.push_back(2); tempK.push_back(4);
tempS.push_back( K[i]+2); tempS.push_back(K[i] +4);
}
}
S = tempS;
tempS.clear();
tempS.resize(100);
K = tempK;
tempK.clear();
tempK.resize(100);
}
}
答案 0 :(得分:0)
这是问题所在:
for (int i=1; i<=K.size(); i++)
矢量索引从0开始,最高索引为K.size()-1
。当i
到达K.size()
时,K[i]
将在向量外访问。
应该是:
for (int i = 0; i < K.size(); i++)