// testmap.cpp : Defines the entry point for the console application.
//
#include <map>
#include <vector>
using namespace std;
int main()
{
std::map<int, int> tv;
for (int i = 0; i < 3; i++)
{
tv[i] = i;
}
{
///在debug模式下崩溃,在release下出错
printf("release --\n");
///在release模式下可以使用
std::map<int, int>::iterator riter = tv.begin();
for (int j = 0; j < 10; j++) {
if (riter == tv.end()) {
riter--;
continue;
} else {
printf("%d, %d\n", riter->first, riter->second);
}
riter--;
}
printf("release ++\n");
///在release下只能输出到012
std::map<int, int>::iterator iter = tv.begin();
for (int j = 0; j < 10; j++) {
if (iter == tv.end()) {
iter++;///之后这句无效无法继续累加跳过end
continue;
} else {
printf("%d, %d\n", iter->first, iter->second);
}
iter++;
}
}
{
///标准用法
printf("stand --\n");
std::map<int, int>::reverse_iterator riter = tv.rbegin();
for (int j = 0; j < 10; j++) {
if (riter == tv.rend()) {
riter = tv.rbegin();
continue;
} else {
printf("%d, %d\n", riter->first, riter->second);
}
riter++;
}
printf("stand ++\n");
std::map<int, int>::iterator iter = tv.begin();
for (int j = 0; j < 10; j++) {
if (iter == tv.end()) {
iter = tv.begin();
continue;
} else {
printf("%d, %d\n", iter->first, iter->second);
}
iter++;
}
///可以使用强制转换在reverse_iterator和iterator之间
std::map<int, int>::reverse_iterator a(iter);
///但不能逆向转换std::map<int, int>::iterator b(riter);
}
getc(stdin);
return 0;
}
iterator循环和反向迭代器的使用
最新推荐文章于 2024-06-23 21:20:14 发布