yue*_*ong 5 c++ iterator vector
我正在做一个uva问题uva 10935扔卡片,我的代码如下。当我运行它时,它说引发了未处理的异常:读取访问冲突,并且还显示“无法在开始之前寻找向量迭代器”,我不知道我的代码中的问题出在哪里:
#include<vector>
#include<iostream>
using namespace std;
int n;
vector<int> out;
int main() {
freopen("data.txt", "r", stdin);
while (scanf("%d", &n) == 1 && n) {
vector<int> cards;
for (int i = 1; i <= n; i++)cards.push_back(i);
vector<int>::iterator it = cards.begin();
vector<int>::iterator end = cards.end();
while (it != (end-1)) {
out.push_back(*it);
it++;
cards.push_back(*it);
it++;
end++;
}
cout << "Discarded cards: ";
for (int j = 0; j < out.size(); j++) {
if(j!=(out.size()-1))cout << out[j] << ", ";
else cout << out[j] << endl;
}
cout << "Remaining card: " << *it << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为 end++ 和其他迭代器有问题。
如果向量卡增长,其内存位置可能会改变,end++将指向无效位置。类似的情况也发生在 it++ 上。
我建议您改用列表:
#include<bits/stdc++.h>
using namespace std;
int n;
int main() {
//freopen("a.in", "r", stdin);
while (scanf("%d", &n) == 1 && n) {
list<int> out;
list<int> cards;
for (int i = 1; i <= n; i++)
cards.push_back(i);
list<int>::iterator it = cards.begin();
list<int>::iterator end = cards.end();
end--;
while (it != (end)) {
out.push_back(*it);
it++;
cards.push_back(*it);
it++;
end++;
}
cout << "Discarded cards: ";
list<int>::iterator it2 = out.begin();
for (int j = 0; j < out.size(); j++, it2++) {
if(j !=(out.size()-1))
cout << *it2 << ", ";
else
cout << *it2 << endl;
}
cout << "Remaining card: " << *it << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:我还没有读过 UVA 问题。
归档时间: |
|
查看次数: |
5085 次 |
最近记录: |