vector存放内置数据类型
容器: vector
算法: for_each
迭代器: vector<int>::iterator
一、创建vector容器对象
创建Vector的时候需要通过模板参数指定容器在红存放的数据类型
语法:
vector
v;
注:指定该vector存放的数据类型为type,该容易的名称为 v
二、遍历vector容器
每一个容易都有自己的迭代器,迭代器是用来遍历容器中的元素
v.begin() 返回一个迭代器,指向容器中的第一个元素。
v.end() 返回一个迭代器,指向容器中最后一个元素的下一个位置。
vector
1、迭代器 while循环
判断两个迭代器不相等的时候就打印其中的数据
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int>v;int main(){v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);vector<int>::iterator vBegin = v.begin();vector<int>::iterator vEnd = v.end();while(vBegin != vEnd){cout << *vBegin << endl;vBegin++;}return 0;}

2、迭代器 for循环
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int>v;int main(){v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);vector<int>::iterator vBegin = v.begin();vector<int>::iterator vEnd = v.end();for(vector<int>::iterator begin = v.begin(); begin < v.end();begin++){cout << *begin << endl;}return 0;}

3、STL算法中的for_each方法
#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int>v;void func(int val){cout << val << endl;}int main(){v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);for_each(v.begin(),v.end(),func);return 0;}

for_each() 函数的原型
template<typename _InputIterator, typename _Function>_Functionfor_each(_InputIterator __first, _InputIterator __last, _Function __f){// concept requirements__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)__glibcxx_requires_valid_range(__first, __last);for (; __first != __last; ++__first)__f(*__first);return _GLIBCXX_MOVE(__f);}

三、vector容器存储自定义数据
学习目标:vector中存放自定义数据类型,并打印输出
#include <vector>#include <string>//自定义数据类型class Person {public:Person(string name, int age) {mName = name;mAge = age;}public:string mName;int mAge;};//存放对象void test01() {vector<Person> v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);// vector 后面尖括号中的数据类型是什么,迭代器的数据类型就是什么for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {cout << "Name:" << (*it).mName << " Age:" << (*it).mAge << endl;}}//放对象指针void test02() {vector<Person*> v;//创建数据Person p1("aaa", 10);Person p2("bbb", 20);Person p3("ccc", 30);Person p4("ddd", 40);Person p5("eee", 50);v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);v.push_back(&p4);v.push_back(&p5);for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) {Person * p = (*it);cout << "Name:" << p->mName << " Age:" << (*it)->mAge << endl;}}int main() {test01();test02();system("pause");return 0;}
四、Vector容器的嵌套使用
学习目标:容器中嵌套容器,我们将所有数据进行遍历输出
#include <vector>//容器嵌套容器void test01() {vector< vector<int> > v;vector<int> v1;vector<int> v2;vector<int> v3;vector<int> v4;for (int i = 0; i < 4; i++) {v1.push_back(i + 1);v2.push_back(i + 2);v3.push_back(i + 3);v4.push_back(i + 4);}//将容器元素插入到vector v中v.push_back(v1);v.push_back(v2);v.push_back(v3);v.push_back(v4);for (vector<vector<int> >::iterator it = v.begin(); it != v.end(); it++) {// it 是一个 类型为vector<int>的迭代器for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++) {// 再对it进行一次操作,得到的就是一个类型为 int 的vit迭代器cout << *vit << " ";}//这样就可以遍历出每一个vector中的所有数据cout << endl;}}int main() {test01();system("pause");return 0;}
五、vector容器的内置几种方法
1、跟插入和删除相关的
函数原型:
push_back(ele);//尾部插入元素elepop_back();//删除最后一个元素insert(const_iterator pos, ele);//迭代器指向位置pos插入元素eleinsert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素eleerase(const_iterator pos);//删除迭代器指向的元素erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素-
2、跟容量和大小相关的
函数原型:
empty();//判断容器是否为空capacity();//容器的容量size();//返回容器中元素的个数resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除。resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
//如果容器变短,则末尾超出容器长度的元素被删除3、跟数据存取相关的
函数原型:
at(int idx);//返回索引idx所指的数据operator[];//返回索引idx所指的数据front();//返回容器中第一个数据元素back();//返回容器中最后一个数据元素4、跟数据交换相关的
功能描述:
- 实现两个容器内元素进行互换
函数原型:
swap(vec);// 将vec与本身的元素互换
