C++11 遍历STL容器方法简记(vector map)

简略记录使用 C++11 特性对 vector 和 map 容器进行遍历,用到了多个方法,对于方法的取舍见仁见智

包括但不限于以下方法:

- 普通迭代器方法

- auto关键字识别迭代器方法

- auto关键字范围遍历方法

- for_each加函数遍历方法

- for_each与lamanda表达式组合方法

/*================================================================
*   Copyright (C) 2017 Renleilei. All rights reserved.
*   
*   文件名称:013_iterator.cpp
*   创 建 者:Renleilei ([email protected])
*   创建日期:2017年11月05日
*   描    述:熟悉iterator用法与实现c++11的新特性及lambda表达式[lamanda is wrong! lambda is right!]
*   版    本: Version 1.00
*   编译方法: g++ -std=c++11 -o main 013_iterator.cpp -O3 -g -Wall
================================================================*/

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

void printElem(int& elem);
void printElem_1(int elem, const char* prefix);

int main()
{
    /* vector的第一种初始化方法 */
    int ia[] = {1, 2, 3};
    cout<<"sizeof(ia)/sizeof(int) = ["< ivec(ia, ia + sizeof(ia)/sizeof(int));
    /* vector的第二种初始化方法 */
    vector _vec02 = {10, 11, 12, 13, 14, 15, 16};
    /* map容器的初始化方法 */
    map imapStudent;

    // ====================================================================
    /* vector 遍历*/
    /* 1.使用迭代器遍历容器 */
    for(vector::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter){
        cout<< *iter << endl;
    }
    /* 2.使用for_each遍历容器 */
    for_each(ivec.begin(), ivec.end(), printElem);
    for_each(ivec.begin(), ivec.end(), bind2nd(ptr_fun(printElem_1), "Element: "));
    /* 3.for_each 与 lambda 表达式的结合遍历容器使代码简洁 */
    for_each(ivec.begin(), ivec.end(), [ &](int _A){ _A = _A + 1; cout<<_A<<","<(1, "student 1"));              //插入方式 - 1
    imapStudent.insert(map::value_type (2, "student 2"));  //插入方式 - 2 [与方式1其实类似]
    imapStudent[3] = "student 3";                                       //插入方式 - 3 [数组方式插入]
    cout<<"map.size: "<::iterator iter_map;                                //设置前向迭代器
    for(iter_map = imapStudent.begin(); iter_map != imapStudent.end(); ++iter_map){         //应用前向迭代器
        cout<first<<"-"<second<<"   ";
    }
    cout<::reverse_iterator iter_map2;                       //设置反向迭代器
    for(iter_map2 = imapStudent.rbegin(); iter_map2 != imapStudent.rend(); ++iter_map2){        //应用反向迭代器
        cout<first<<"-"<second<<"   ";
    }
    cout<


 

 

 

你可能感兴趣的:(C++编程,Linux,MacOS)