//第二十三模板 18标准模板库
//1 容器 容器是包含其他对像的对像,标准C++ 库中提供了一系列的容器类
//可以分为两种类型,顺序和关联类型,顺序容器可提供对自身元素的顺序或者随机访问,关联容器则过滤掉了一些元素,只按关键值访问有关元素
//2 顺序容器
//标准C++库提供了三种顺序容器,分别为vector list 和deque
//2.1 向量容器
/*#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int num=2;
int main()
{
vector<double>price(num);
vector<string>book(num);
cout<<"开始录入"<<num<<"本书的数据"<<endl;
for(int i=0; i<num; i++)
{
cout<<"请输入第"<<i+1<<"本书的书名:";
getline(cin,book[i]);
cout<<"请输入价格:";
cin>>price[i];
cin.ignore();
}
for(int i=0; i<num; i++)
{
cout<<"第"<<i+1<<"本书的书名:";
cout<<book[i]<<"\t"<<"价格:"<<price[i]<<endl;
}
cout<<"max_size:"<<book.max_size()<<endl;
return 0;
}*/
/*
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class people
{
public:
people();
people(const string&name, const int age);
people(const people&r);
~people();
void SetName(const string&name);
string GetName()const;
void SetAge(const int age);
int GetAge()const;
people&operator=(const people&r);
private:
string theName;
int theAge;
};
people::people():theName("默认创建的新人"),theAge(52){}
people::people(const string&name, const int age):theName(name),theAge(age){}
people::people(const people&r):theName(r.GetName()),theAge(r.GetAge())
{
cout<<"复制构造函数"<<endl;
}
people::~people(){cout<<"析构函数执行"<<endl;}
void people::SetName(const string&r)
{
theName = r;
}
string people::GetName()const
{
return theName;
}
void people::SetAge(const int age)
{
theAge = age;
}
int people::GetAge()const
{
return theAge;
}
people&people::operator=(const people&r)
{
cout<<"operator=函数执行";
theName = r.GetName();
theAge = r.GetAge();
return *this;
}
ostream &operator<<(ostream&out, const people&r)
{
out<<r.GetName()<<"的年龄是:"<<r.GetAge()<<endl;
return out;
}
template<class T>
void show(const vector<T>&v); //定认一个容器参数为一个模板值
typedef vector<people>man; //man的在这里定义一个容器,里面放的是people
int main()
{
people Jack;
people Mary("Mark",24);
people Tom("Tom",18);
people Jesson("Jesson",29);
man non;
cout<<"non:"<<endl;
show(non);
man manyMan(3);
cout<<"manyMan(3):"<<endl;
show(manyMan);
manyMan[0] = Mary;
manyMan[1] = Tom;
manyMan[2] = Jesson;
cout<<"为容器manyMan(3)分配个人后:"<<endl;
show(manyMan);
people Ketty("Ketty",58);
manyMan.push_back(Ketty);
manyMan.push_back(Jack);
cout<<"manyMan()增加二个人后:"<<endl;
show(manyMan);
manyMan[0].SetName("Rose");
manyMan[0].SetAge(16);
cout<<"设置manyMan[0]后:"<<endl;
system("pause");
return 0;
}
template<class T>
void show(const vector<T> &v)
{
cout<<"max_size()="<<v.max_size();
cout<<"\tsize()="<<v.size();
cout<<"\t capacity()="<<v.capacity();
cout<<"\t"<<(v.empty()?"空":"不为空");
cout<<endl;
for(int i=0; i<v.size(); ++i)
{
cout<<v[i]<<endl;
}
cout<<endl;
}*/
/*
Constructors() 构造函数
Operators() 对vector进行赋值或比较
assign() 对vector中的元素赋值
at() 返回指定位置的元素
back() 返回最末一个元素
begin() 返回第一个元素的迭代器
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
end() 返因最末元素的迭代器(实指向最末元素的下一个位置)
erase() 删除指定元素
front() 返回第一个元素
get_allocator() 返回vector的内存分配器
insert() 插入元素的vctor中
pop_back() 移除最后一元素
push_back() 在vector最后添加一个元素
rbegin() 返回vector尾部的逆迭代器
rend() 返回vector起始的逆迭代器
reserve() 设置vector最小的元素容纳数量
resize() 改变Vector元素的数量大小
size() 返回vector元素数量的大小
swap() 交换两个Vector
*/