前言:
我是在哔哩哔哩黑马程序员中c++课程p186初识-vector存放内置数据类型学会的,课程学习起来个人感觉非常不错,是c++宝藏课程。
一.创建vector容器
1.包含<vector>头文件
#include<vector>
2.创建一个(int型数组) vector容器
vector<int> v;
3.向容器中插入数据 尾插数据
调用容器里的push_back()成员函数 v.push_back();
4.代码实现
#include<vector>
#include<algorithm>//标准算法头文件
//vector容器存放内置数据类型
//普通打印函数
void myPrint(int val)
{
cout << val << endl;
}
void test01()
{
//创建了一个vector容器,int型数组
vector<int> v;
//向容器中插入数据 尾插数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
二.三种遍历方法
1.通过迭代器访问容器中的数据进行遍历
类似顺序表遍历 迭代器:广义上的指针 创建 迭代器对象 itBegin = v.begin(); itEnd = v.end(); 其中:v.begin() 和 v.end() 是vector容器里的成员函数 直接调用即可
vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中的第一个元素
vector<int>::iterator itEnd = v.end(); //结束迭代器 指向容器中最后一个元素的下一个位置
技巧:(迭代器自增最好用前置递增,能节约开销)
代码实现:
//通过迭代器访问容器中的数据 类似顺序表 迭代器 广义上的指针
//vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中的第一个元素 //vector<int>::iterator itEnd = v.end(); //结束迭代器 指向容器中最后一个元素的下一个位置
//第一种遍历方法
while (itBegin != itEnd)
{
cout << *itBegin<<endl;
itBegin++;
}
2.通过for循环遍历
与第一种方法类似,但更简单。代码实现如下:
//第二种遍历方法
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
在 for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)中,我们尽可能使用 it != v.begin();而不是 it < v.begin(); 因为在后面的容器中,有链表存储方式的容器,如deque,queue,stactk,此时迭代器(类似指针)所指向的地址并不是连续的,用地址比较的结果无法用来判断谁在前,谁在后,是无序的,只能通过 判断是否 == .end() 的地址来结束循环。
3.通过利用STL提供遍历算法
1.先包含标准算法头文件 <algorithm>
2.调用算法头文件所包含的成员函数 for_each() 其底层原理如下:右键 for_each() 转到定义即可 返回点击左上角源文件即可
大概意思就是:将起始、结束迭代器 传入一个函数之中(跟回调函数一样) for_each(v.begin(),v.end(),函数名) 回调此函数
3.具体做法:
首先在外此函数体外创建一个新的打印函数 myprint(int val){};
代码实现如下:
//普通打印函数
void myPrint(int val)
{
cout << val << endl;
}
其次:在原来函数中 添加 for_each(v.begin(), v.end(), myPrint);即可
代码实现如下:
//第三种遍历方式
//利用STL提供遍历算法 头文件 <algorithm>
for_each(v.begin(), v.end(), myPrint); // for_each(v.begin(),v.end(),函数名) 回调此函数
三.完整代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//标准算法头文件
//vector容器存放内置数据类型
//普通打印函数
void myPrint(int val)
{
cout << val << endl;
}
void test01()
{
//创建了一个vector容器,int型数组
vector<int> v;
//向容器中插入数据 尾插数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
通过迭代器访问容器中的数据 类似顺序表 迭代器 广义上的指针
//vector<int>::iterator itBegin = v.begin();//起始迭代器 指向容器中的第一个元素
//vector<int>::iterator itEnd = v.end(); //结束迭代器 指向容器中最后一个元素的下一个位置
第一种遍历方法
//while (itBegin != itEnd)
//{
// cout << *itBegin<<endl;
// itBegin++;
//}
//第二种遍历方法
/*for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}*/
//第三种遍历方式
//利用STL提供遍历算法 头文件 <algorithm>
for_each(v.begin(), v.end(), myPrint);// for_each(v.begin(),v.end(),函数名) 回调此函数
}
int main()
{
test01();
system("pause");
return 0;
}