四种方式遍历二维vector

#include <iostream>
#include <vector>
#include <algorithm>            //此头文件是算法库的一部分,for_each函数模板就定义于这个头文件
#include <boost/type_index.hpp> //boost::typeindex::type_id_with_cvr<decltype(variable)>().pretty_name()

using std::cout;
using std::endl;
using std::vector;

/*方法1:*/
/**
 *  @brief  iterator实现遍历二维vector
 *  @param  vec 二维vector
 *  @return void
 */
template <class T>
void traversal_two_dimensional_vector(vector<vector<T>> vec)
{
    for (typename vector<vector<T>>::iterator iter = vec.begin(); iter != vec.end(); iter++) // typename用于消除歧义,显示告诉编译器vector<vector<T>>::iterator是类型名,而不是某类的成员
    {
        vector<T> vec_temp = *iter;
        for (typename vector<T>::iterator it = vec_temp.begin(); it != vec_temp.end(); it++)
        {
            cout << *it << "\t";
        }
        cout << endl;
    }
}
/*方法2:*/
/**
 *  @brief 范围for实现二维vector遍历
 *  @param vec 二维vector
 *  @return void
 */
template <class T>
void tarversal_vector_use_rangefor(const vector<vector<T>> vec)
{
    for (auto i : vec)
    {
        // cout << boost::typeindex::type_id_with_cvr<decltype(i)>().pretty_name() << endl;  //输出变量i完整类型名
        for (auto j : i)
        {
            cout << j << "\t";
        }
        cout << endl;
    }
}

/*方法3:*/
/**
 *  @brief for循环遍历二维vector
 *  @param vec 二维vectot
 *  @return viod
 */
template <class T>
void tarversal_vector_use_for(const vector<vector<T>> vec)
{
    if (!vec.empty())
    {
        for (unsigned i = 0; i < vec.size(); i++)
        {
            vector<T> vec_temp = vec[i];
            for (unsigned j = 0; j < vec_temp.size(); j++)
            {
                cout << vec_temp[j] << "\t";
            }
            cout << endl;
        }
    }
}
/*方法4:*/
/**
 * @brief 使用for_each与Lambda表达式遍历二维vector
 * @param vec 二维vector
 * @return void
 */
template <class T>
void tarversal_vector_use_foreach(const vector<vector<T>> &vec)
{
    std::for_each(vec.begin(), vec.end(), [](vector<T> vec_temp) { // cout << boost::typeindex::type_id_with_cvr<decltype(vec_temp)>().pretty_name() << endl; //输出变量i完整类型名
        std::for_each(vec_temp.begin(), vec_temp.end(), [](auto value)
                      { cout << value << "\t"; });
        cout << endl;
    });
}
int main(int argc, char **argv)
{// 定义一个int类型的二维vector
    vector<vector<int>> ivec{vector<int>{4, 3}, vector<int>{2, 1}};
    // 定义一个string类型的二维vector
    vector<vector<std::string>> str_vec{vector<std::string>{"zhangsan", "student"}, vector<std::string>{"wangwu", "teacher"}};

    // 使用iterator遍历二维vector
    // traversal_two_dimensional_vector(str_vec);
    // traversal_two_dimensional_vector(ivec);

    // 使用range for遍历二维vector
    // tarversal_vector_use_rangefor(str_vec);
    // tarversal_vector_use_rangefor(ivec);

    // 使用for循环遍历二维vector
    // tarversal_vector_use_for(str_vec);
    // tarversal_vector_use_for(ivec);

    // 使用for_each与lambda遍历二维 vector
    // tarversal_vector_use_foreach(str_vec);
    // tarversal_vector_use_foreach(ivec);
}

 

posted @ 2023-08-05 23:55  mibrcogu  阅读(1226)  评论(0)    收藏  举报