C++-STL-vector:vector遍历的几种方法
2023-09-27 14:20:39 时间
随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。
vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。
(注:本文中代码为C++11标准的代码,需要在较新的编译器中编译运行)
假设有这样的一个vector:(注意,这种列表初始化的方法是c++11中新增语法)
vector<int> valList = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
需要输出这个vector中的每个元素,测试原型如下:
void ShowVec(const vector<int>& valList)
{
}
int main(int argc, char* argv[])
{
vector<int> valList = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ShowVec(valList);
return 0;
}
下面就开始我们的茴香豆的N种写法吧 !
方法零,对C念念不舍的童鞋们习惯的写法:
void ShowVec(const vector<int>& valList)
{
int count = valList.size();
for (int i = 0; i < count;i++)
{
cout << valList[i] << endl;
}
}
或者
void ShowVec(const vector<int>& valList)
{
int count = valList.size();
for (int i = 0; i < count;i++)
{
cout << valList.at(i) << endl;
}
}
方法一,大家喜闻乐见的for循环迭代器输出,(注意,此处使用了C++11中新增的标准库容器的cbegin函数)
void ShowVec(const vector<int>& valList)
{
for (vector<int>::const_iterator iter = valList.cbegin(); iter != valList.cend(); iter++)
{
cout << (*iter) << endl;
}
}
或者使用c++新增的语义auto,与上面差不多,不过能少打几个字:
void ShowVec(const vector<int>& valList)
{
for (auto iter = valList.cbegin(); iter != valList.cend(); iter++)
{
cout << (*iter) << endl;
}
}
方法二,for_each加函数:
template<typename T>
void printer(const T& val)
{
cout << val << endl;
}
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), printer<int>);
}
方法三,for_each加仿函数:
template<typename T>
struct functor
{
void operator()(const T& obj)
{
cout << obj << endl;
}
};
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), functor<int>());
}
方法四,for_each加Lambda函数:(注意:lambda为c++11中新增的语义,实则是一个匿名函数)
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), [](const int& val)->void{cout << val << endl; });
}
方法五,for区间遍历:(注意,for区间遍历是c++11新增的语法,用于迭代遍历数据列表)
for (auto val : valList)
{
cout << val << endl;
}
C++ vector的N种遍历方法_7Maggie_C的博客-CSDN博客_c++ 遍历vector
https://www.jb51.net/article/218197.htm
相关文章
- C++ 获取类成员函数地址,并通过地址调用函数
- C++ 遍历 MiniFilter
- C++ 遍历进程窗口标题、窗口类名
- C++ 进程遍历(最简单)
- 87 C++ - 常用遍历算法
- C++程序设计:原理与实践(进阶篇)15.4 链表
- 【创】C/C++无向图-邻接矩阵表示法 & DFS & BFS & 连通图 & 回路
- 《C++多线程编程实战》——2.10 在内核实现线程
- 《C++编程风格(修订版)》——2 一致性
- 基于QT(C++)实现线性表节点的存储结构综合应用设计【100010708】
- C++11 数值类型和字符串的相互转换
- Linux下GDB调试C/C++
- 105、【树与二叉树】leetcode ——530. 二叉搜索树的最小绝对差:中序遍历递归法+迭代法(C++版本)
- 90、【树与二叉树】leetcode ——104. 二叉树的最大深度:层次遍历+DFS+子问题分解(C++版本)
- 23、【数组】对角线遍历(C++版)
- C++编程规范之18:尽可能局部地声明变量
- 大话设计模式C++版——代理模式
- 树的c++实现--建立一棵树
- C++实现遍历指定文件或文件夹
- C/C++ Windows API——关闭、启动、查询服务状态