---------------------------------------------------------------------------------------------------------------------------------
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,具体可以遵循下面的原则:
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");
}