1. C++常用的遍历方法

1. C++常用的遍历方法

遍历:指的是集合中每个元素只访问一次。常见的方法有一下六种。

在这里插入图片描述

下面以字符串遍历与数组(向量)遍历为例

【字符串遍历】

string str("XDU");
  1. 传统Cfor写法

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

    size_t:

    ​ 一个基本的无符号整型的C/C++类型,它是sizeof操作返回的结果,该类型的大小可选择。因此,它可以存储在理论上可能的任何类型的数组的大小。

    size_t相当于unsigned int 是无符号整型

    typedef unsigned int size_t

  2. 迭代器for写法

    for(string::iterator it = str.begin(); it!=str.end(); it++){
    	cout << *it << endl;
    }
    
  3. STLfor_each写法

    for(char c : str){
        cout << c <<endl;
    }
    
  4. C++11迭代器写法

    for(string::iterator it = begin(str); it != end(str); it++){
        cout << *it << endl;
    }
    

    或者

    for(auto it = begin(str); it != end(str); it++){
        cout<< *it << endl;
    }
    
  5. C++11 for loop scope 写法

    for(char c : str){
        cout << c << endl;
    }
    

    或者

    for(auto c : str){
        cout << c <<endl;
    }
    
  6. C++11 STL for_each与lamdba表达式

    //使用for_each遍历需要引用头文件#include<algorithm>
    for_each(begin(str),end(str),[](char c){cout << c << endl;});
    

【C++代码】

#include<algorithm>
int main() {
	string str = "XDU";
	//遍历1
	for (size_t i = 0; i < str.size(); i++) {
		cout << str[i] << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历2
	for (string::iterator it = str.begin(); it != str.end(); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历3
	for (char c : str)
	{
		cout << c << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历4:写法一
	for (string :: iterator it = begin(str); it != end(str); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历4:写法二:用auto代替string::iterator 类型
	for (auto it = begin(str); it != end(str); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历5:写法一
	for (char c : str) {
		cout << c << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历5:写法二用auto代替char类型
	for (auto c : str) {
		cout << c << endl;
	}
	cout << "--------------------------------" << endl;
	//遍历6:for_each
	for_each(begin(str), end(str), [](char c) { cout << c << endl; });
	system("pause");
	return 0;
}

【结果】
在这里插入图片描述

【向量遍历】

vector<char> vec;
vec.push_back('X');
vec.push_back('D');
vec.push_back('U');
  1. C语言写法

    for(size_t i = 0; i < vec.size(); i++){
        cout << vec[i] << endl;
    }
    
  2. 迭代器

    for(vector<char>::iterator it = vec.begin(); it != vec.end(); it++){
    	cout << *it << endl;
    }
    
  3. STL for_each写法

    void print(char n){
        cout << n <<endl; 
    }
    for_each(vec.begin(), vec.end(), print);
    
  4. C++11迭代器写法

    for(vector<int>::iterator it = begin(vec); it != end(vec); it++){
    	cout << *it << endl;
    }
    

    或者

    for(auto it = begin(vec); it != end(vec); it++){
        cout << *it << endl;
    }
    
  5. C++11 for新语法写法

    for(int n : vec){
        cout << n << endl;
    }
    

    或者

    for(auto n : vec){
        cout << n << endl;
    }
    
  6. C++11STL for_each与lamdba表达式

    for_each(begin(vec),end(vec),[](int n){cout << n << endl;});
    

【c++代码】

int main(){
	Scout << "向量遍历" << endl;
	vector<char> vec;
	vec.push_back('M');
	vec.push_back('B');
	vec.push_back('Y');
	//向量遍历1:
	for (size_t i = 0; i < vec.size(); i++) {
		cout << vec[i] << endl;
	}
	cout << "--------------------------------" << endl;
	//向量遍历2:迭代法写法一
	for (vector<char>::iterator it = vec.begin(); it != vec.end(); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//向量遍历2:迭代法写法二
	for (auto it = vec.begin(); it != vec.end(); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//向量遍历3:STL for_each
	for_each(vec.begin(), vec.end(),print);
	cout << "--------------------------------" << endl;
	//向量遍历4:C++迭代器写法
	for (vector<char>::iterator it = begin(vec); it != end(vec); it++) {
		cout << *it << endl;
	}
	//或
	for (auto it = begin(vec); it != end(vec); it++) {
		cout << *it << endl;
	}
	cout << "--------------------------------" << endl;
	//向量遍历 forC++新语法
	for (auto n : vec) {
		cout << n << endl;
	}
	cout << "--------------------------------" << endl;
	//C++11STLfor_each与lamdba表达式
	for_each(begin(vec), end(vec), [](char n) {cout << n << endl; });
	cout << "--------------------------------" << endl;
	system("pause");
	return 0;
	return 0;
}

【结果】

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值