C++11 遍历容器

本文演示了如何使用C++中的STL容器和算法,特别是通过`vector`的遍历示例,展示了多种打印输出元素的方法,包括传统迭代器、范围for循环、`for_each`算法配合普通函数及Lambda表达式等。

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

void Print(string str)
{
	cout << str << endl;
}
void Print2(string str,const char* pre)
{
	cout << pre << str << endl;
}
int main()
{
	//遍历vector
	vector<string> vTmp;
	vTmp.push_back("abc");
	vTmp.push_back("123");

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

	for(auto str : vTmp)
	{
		cout << str << endl;
	}

	for_each(vTmp.begin(),vTmp.end(),Print);

	for_each(vTmp.begin(),vTmp.end(),[](string &str){ cout << str << endl; });

	for_each(vTmp.begin(),vTmp.end(),[](string &str){ Print(str); });

	for_each(vTmp.begin(), vTmp.end(), bind2nd(ptr_fun(Print2), "Element:"));//传参 functional

	return 0;
}
map<int,string> ma;
for_each(ma.begin(),ma.end(),bind(Print,bind(map<int,string>::value_type::second,_1)));


<think>嗯,用户想了解如何在C++遍历容器的方法或示例。首先,我需要回忆一下C++中的迭代器相关知识。根据用户提供的引用[1],迭代器是指向容器元素的对象,类似于指针,可以用来循环访问容器。所以,我应该从迭代器的基本用法开始。 然后,可能需要介绍不同的迭代器类型,比如使用begin()和end()来获取迭代器的起点和终点,这是最常见的做法。例如,对于vector这样的容器,可以用for循环配合迭代器来遍历。用户可能需要具体的代码示例,所以得举几个例子,比如使用传统for循环C++11引入的基于范围的for循环。 接着,考虑到不同的容器类型,比如map和set,它们的迭代器使用方式可能有所不同。例如,map的每个元素是一个键值对,遍历时需要解引用成pair类型。这时候应该分别给出不同容器遍历示例,以展示通用性。 另外,用户提供的引用[2]提到了基本数据类型和控制结构,所以示例代码应该保持简单,使用基本语法,避免复杂的特性,方便初学者理解。可能需要检查代码中的语法是否正确,比如是否正确使用迭代器的操作符和解引用。 还要注意引用格式,用户要求引用的标识符放在相关段落末尾,比如在提到迭代器概念时加上[^1]。同时,确保所有代码块使用正确的格式,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能不太涉及数学公式,所以主要关注代码部分。 然后,生成相关问题的时候,要围绕遍历容器的不同方法、迭代器类型、C++11特性以及具体容器遍历技巧来提问。确保问题覆盖用户可能感兴趣的扩展内容,比如性能比较或者不同迭代器的区别。 最后,检查整个回答是否符合用户的要求:使用中文,结构清晰,代码正确,引用标识正确放置,并且相关问题与主题相关。可能还需要确认是否遗漏了其他遍历方法,比如使用算法库中的函数,但考虑到用户请求的是基础示例,可能不需要深入高级话题,保持回答简洁明了。</think>### C++容器遍历方法详解 在C++遍历容器主要使用迭代器(Iterator)和C++11引入的基于范围的for循环。以下是具体方法和示例: #### 一、迭代器基础 迭代器是连接算法与容器的桥梁,所有标准容器(如$vector$、$list$、$map$)都提供迭代器接口。 ```cpp #include <vector> using namespace std; vector<int> nums{1,2,3,4,5}; // 传统迭代器遍历 for(vector<int>::iterator it = nums.begin(); it != nums.end(); ++it) { cout << *it << " "; } // C++11自动类型推导 for(auto it = nums.begin(); it != nums.end(); ++it) { cout << *it << " "; } ``` #### 二、不同容器遍历示例 1. **顺序容器**($vector$/$list$/$deque$) ```cpp #include <list> list<string> names{"Alice", "Bob", "Charlie"}; for(auto it = names.begin(); it != names.end(); ++it) { cout << *it << endl; } ``` 2. **关联容器**($map$/$set$) ```cpp #include <map> map<int, string> id_name{{1,"Tom"}, {2,"Jerry"}}; for(auto it = id_name.begin(); it != id_name.end(); ++it) { cout << "ID:" << it->first << " Name:" << it->second << endl; } ``` #### 三、C++11基于范围的for循环 ```cpp // 遍历vector vector<double> prices{9.99, 24.5, 3.14}; for(const auto& price : prices) { cout << price << " "; } // 遍历map for(const auto& pair : id_name) { cout << pair.first << "=>" << pair.second << endl; } ``` #### 四、反向迭代器 ```cpp // 逆向输出vector内容 for(auto rit = nums.rbegin(); rit != nums.rend(); ++rit) { cout << *rit << " "; } ``` [^1]: 迭代器作为容器元素的指针式访问工具,支持标准化的遍历操作 [^2]: C++11新特性简化了容器遍历的语法结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值