---------------------------------------------------------------------------------------------------------------------------------

因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,具体可以遵循下面的原则:
1. 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2. 如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3. 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

---------------------------------------------------------------------------------------------------------------------------------

知识点:

1、对象定义;

2、vector对象初始化;

3、容器的大小和容量;

4、成员函数;

empty()、遍历、相关算法(for_each()、count()等)

5、元素访问;

c.at()、c[i]、c.front()、c.back()等

6、迭代器相关函数;

begin()、end()、rbedin()、rend()、

7、元素查找和搜索;

find()、find_if()

8、排序

sort();查看相关子进程的定义,用来有条件排序;

9、插入元素

puch_back()、insert()返回值为迭代器

9、删除元素

pop_back()、erase()、clear()

10、交换元素

swap()

知识盲点补充:

progrma:

练习代码:

/*-------------------vector类------------------*/

//消除警告信息
#pragma warning(disable:4786)

#include <iostream>
//头文件
#include <vector>
#include <string>
#include <algorithm>

//命名空间std是类的包容器
using namespace std;

//定义结构体
struct Student {
	int id;
	double score;
};

//初始化容器函数  模板函数的使用
template <class T> void Origin(T &myvt) {
	
	Student s;
	for (int i = 0; i < 5; i++)
	{
		s.id = i + 1;
		s.score = (i + 1) * 10;
		myvt.push_back(s);                    //2、初始化vt这个vector容器
	}
}

//判断成绩
bool greaterthan95(Student& st){
	if (st.score >= 95) {
		return 1;
	}
	else {
		return 0;
	}
}

//输出方法1:迭代输出
void iterator_out(vector<Student> &vt) {
	Student st;
	vector<Student>::iterator it;
	cout << "第一种输出:迭代器输出" << endl;
        //begin()、end()、rbegin()、rend()
	for (it = vt.begin(); it != vt.end(); it++)
	{
		st = *it;
		cout << "ID:" << st.id << "DB:" << st.score << endl;
	}
}

//输出方法2:at()函数
void at_out(vector<Student> &vt) {
	cout << "第二种输出:at()函数输出" << endl;
	Student st;
	for (int i = 0; i<vt.size()-1; i++)
	{
		st = vt.at(i);
		cout << "ID:" << st.id << "DB:" << st.score << endl;

	}
}

//vector容器的大小和容量;
void output_size(vector<Student> &vt) {
	int m = vt.capacity();  //能装的元素个数
	int n = vt.size();    //当前容器包含的元素个数
	int c = vt.max_size();   //日期能包含的最多的元素个数

	cout << "容器的capacity大小为:" << m << endl;
	cout << "容器的Size大小为:" << n << endl;
	cout << "容器的max_size大小为:" << c << endl;
}

//out输出
void out(Student &std){
	cout << std.id << " " << std.score << endl;
}
void main() {
	
	vector<Student> myvt;                       //1、定义类模板对象
	vector<Student>::iterator iter;              //定义迭代器

	//v1.reserve(10);  //3、容器大小:reserve()可以预先设置容器的大小
	//v1.resize(18);  //3、容器大小:修改容器的大小
	
	Origin(myvt);  //初始化vector向量

	//for_each算法;
	for_each(myvt.begin(),myvt.end(),out);
	//count算法
	int countv = count_if(myvt.begin(), myvt.end(),greaterthan95);
	cout << "优秀的人数为:" << countv << endl;
	

        /*-------------------元素的访问方法-------------*/


	cout << "下标为2的元素ID为: " << myvt.at(2).id << ";   score为:   " << myvt.at(2).score << endl;
	cout << "下表为3元素ID为: " << myvt[3].id << ";   score为:   " << myvt[3].score << endl;
	cout << "第一个元素ID为: " << myvt.front().id << ";   score为:   " << myvt.front().score << endl;

	while (!myvt.empty()) {   //1、非空判断empty()
		Student s;
		s = myvt.back();  //最后的一个元素
		cout << "最后一个元素ID为: " << s.id << ";   score为:   " << s.score << endl;
		myvt.pop_back();  //弹出
		
	}
//元素排序sort():默认从小到大
	sort(myvt.begin(), myvt.end());
//sort(myvt.begin(), myvt.end(),sort_down);//sort_down为自己定义的子进程
//插入insert()  和puch_back();
//删除pop_back():最后一个;   erase():指定元素,指定范围元素;   clear():所有元素
//对象交换swap()


//	iterator_out(myvt);
//      at_out(myvt);

	system("pause");
	
}