#include <iostream>
#include <set>
#include <vector>
#include <list>
int main()
{
// vector
std::vector<int> myvector;
// 一个 vector 就像一个动态的一维数组
// 声明一个存放 100 个 0 的整数的 vector
std::vector<int> myvec(100, 0);
// 返回 vector 的大小, 即元素的个数
std::cout << myvec.size() << std::endl;
// 删除 vector 末尾的元素, vector 的大小相应减1
myvec.pop_back();
// 在 vector 的末尾添加元素
myvec.push_back(10);
// 返回 vector 末尾的元素
std::cout << myvec.back() << std::endl;
// 清除 vector 所有元素, vector 的个数为 0
myvec.clear();
std::cout << myvec.size() << std::endl;
// 访问方式
// std::cout << myvec[1] << std::endl; //这种方法访问越界会异常
// std::cout << myvec.at(5) << std::endl; //这种方法访问越界会异常
// 遍历
// 遍历方法1, 推荐
for(std::vector<int>::iterator iter_1 = myvec.begin(); iter_1 != myvec.end(); iter_1++)
std::cout << (int)*iter_1 << std::endl;
// 遍历方法2, 不推荐, 原因忘记
for(int i = 0; i <= myvec.size(); i++)
std::cout << myvec[i] << std::endl;
// set
// set 是集合, 但 set中不能包含重复的元素, 这是与 vector 的区别
std::set<int> myset;
myset.insert(10); // 插入元素
myset.insert(10); // 没用, 插入失败, 因为不能有重复元素
myset.erase(10); // 删除元素,如果元素存在的话
myset.size();
myset.clear();
// list 相当于一个列表
std::list<int> mylist;
mylist.push_back(100);
mylist.remove(100);
/*
* vector用的是随机存取迭代器,list用的是双向迭代器
*
* 如果我们需要随机访问一个容器则vector 要比list 好得多
* 如果我们已知要存储元素的个数则vector 又是一个比list 好的选择
* 如果我们需要的不只是在容器两端插入和删除元素则list 显然要比vector 好
* 除非我们需要在容器首部插入和删除元素否则vector 要比deque 好
*/
return 0;
}