C++ 四种迭代器与三种遍历方式

C++ 四种迭代器与三种遍历方式

一、四种迭代器

拿vector举例

  1. 非const对象的正向迭代器
vector<int>::iterator it = v.begin();
while (it != v.end()) {
	cout << *it << " ";
	it++;
}
  1. 非const对象的反向迭代器
vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend()) {
	cout << *rit << " ";
	++rit;
}
  1. 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;
  1. for+auto遍历
for (auto e : v) {//也可以写成auto& e可修改v里的内容
	cout << e << " ";
}
cout << endl;
  1. 迭代器遍历
vector<int>::iterator it = v.begin();//也可以写成auto it=vbegin();更加简洁
while (it != v.end()) {
	cout << *it << " ";
	++it;
}
cout << endl;
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
二叉树的迭代遍历算法主要有三种:前序遍历、中序遍历和后序遍历。下面分别介绍这三种算法的迭代实现方法: 1. 前序遍历迭代算法: 前序遍历的顺序是根节点 -> 左子树 -> 右子树。使用迭代算法实现前序遍历时,可以通过栈来辅助实现。具体步骤如下: 1)将根节点入栈。 2)当栈不为空时,循环执行以下操作: a) 弹出栈顶节点,并将其值加入结果列表。 b) 若右子节点存在,则将右子节点入栈。 c) 若左子节点存在,则将左子节点入栈。 3)返回结果列表。 2. 中序遍历迭代算法: 中序遍历的顺序是左子树 -> 根节点 -> 右子树。使用迭代算法实现中序遍历时,同样可以通过栈来辅助实现。具体步骤如下: 1)初始化一个空栈,并将当前节点置为根节点。 2)循环执行以下操作,直到栈为空: a) 将当前节点及其所有左子节点依次入栈,直到最左叶子节点。 b) 弹出栈顶节点,并将其值加入结果列表。 c) 若弹出节点存在右子节点,则将右子节点置为当前节点。 3)返回结果列表。 3. 后序遍历迭代算法: 后序遍历的顺序是左子树 -> 右子树 -> 根节点。使用迭代算法实现后序遍历时,需要使用两个栈来辅助实现。具体步骤如下: 1)初始化两个空栈,分别为stack1和stack2。将根节点入栈stack1。 2)当stack1不为空时,循环执行以下操作: a) 弹出stack1的栈顶节点,并将其左子节点和右子节点依次入栈stack1。 b) 将弹出的节点压入stack2。 3)当stack1为空时,将stack2中的节点依次弹出并加入结果列表。 4)返回结果列表。 以上是三种常用的二叉树遍历迭代算法,根据不同的需求可以选择相应的算法进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyycqupt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值