C++迭代器

本文详细解释了C++中的迭代器概念,包括正向迭代器、反向迭代器的使用,以及如何通过下标、auto和迭代器进行容器遍历。同时介绍了const对象的迭代器特性和一些辅助函数如std::advance和std::iter_swap的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器是什么? 用来访问容器的一个桥梁

队列和栈没有迭代器

正向迭代器
容器类名::iterator 迭代器名;

std::vector<int> data2 = {1,2,3,4,5,6,7};
std::vector<int>::iterator hh;
hh = data2.begin();
//一般都自动类型推断,推荐下面的写法
auto hh = data2.begin();
while (hh != data2.end()) {
       std::cout << *hh << " ";
       hh++;
}

2.非const对象的反向迭代器

std::vector<int>::reverse_iterator rit = data2.rbegin();
    while (rit != data2.rend()) {
        std::cout << *rit << " ";
        ++rit;
    }

3.const对象的正向迭代器与const对象的反向迭代器

void print_vector(const vector<int>& v) {//在实际过程中一般不直接使用const 定义对象
	//一般和引用&用于传参中,引用提高效率,const防止改变对象
	//const对象的正向迭代
	vector<int>::const_iterator it = v.begin();
	while (it != v.end()) {
		cout << *it << " ";
		++it;
	}
	cout << endl;
	//const对象的反向迭代
	vector<int>::const_reverse_iterator rit = v.rbegin();
	while (rit != v.rend()) {
		cout << *rit << " ";
		rit++;
	}
	cout << endl;
}

三种遍历方法

1.for+下标遍历

for (size_t i = 0; i < v.size(); i++) {
	cout << v[i] << " ";
}
cout << endl;

2.for+auto遍历

for (auto e : v) {//也可以写成auto& e可修改v里的内容
	cout << e << " ";
}
cout << endl;

3.迭代器遍历

for (auto e : v) {//也可以写成auto& e可修改v里的内容
	cout << e << " ";
}
cout << endl;

迭代器的辅助函数:std::advance(hh, 2);

相当于C里面的p+i

std::vector<int> data2 = {1,2,3,4,5,6,7};
    std::vector<int>::iterator hh;
    hh = data2.begin();
    //一般都自动类型推断,推荐下面的写法
    //auto hh = data2.begin();
    std::advance(hh, 2);
    while (hh != data2.end()) {
        std::cout << *hh << " ";
        hh++;
    }

std::iter_swap(data2.begin(), data2.end() - 1); //7和1交换 第一个和最后一个交换

std::vector<int> data2 = {1,2,3,4,5,6,7};
    std::vector<int>::iterator hh;
    hh = data2.begin();
    //一般都自动类型推断,推荐下面的写法
    //auto hh = data2.begin();
    //std::advance(hh, 2);
    std::iter_swap(data2.begin(), data2.end() - 1);  //7和1交换 第一个和最后一个交换
    while (hh != data2.end()) {
        std::cout << *hh << " ";
        hh++;
    }

STL查找算法排序算法真多,工作中看到用用就行,和查字典一样留个印象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值