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>
_Function
for_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与本身的元素互换