线性容器vector
- 对于线性容器,除了front,back,其他的都用的地址进行操作。
初始化
vector<int> abc(10); //初始化了10个默认值为0的元素
vector<int> cde(10,1); //初始化了10个值为1的元素- 通过数组地址初始化
int a[5] = {1,2,3,4,5};
vector<int> b(a, a+5);//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
或 vector<int> res={-1,-1};
基础操作
排序
默认升序 std::sort(起点地址, 终点地址);
数组int a[] = {2, 1, 3};
排序 std::sort(a, a+3);
vector<int> a;
排序 std::sort(a.begin(), a.end());
放入函数指针< std::sort(起点地址, 终点地址,f);
简单降序
bool f(const int a, const int b) {return a > b; // 降序排列
}
对vector<Obj> myobj ;
排序
bool f(const Obg& a, const Obg& b) {return a.value < b.value; // True 不换
}
队列 queue (vector minus?)
queue<int> q;
q.front();q.back();
q.push(x); q.pop(); q.empty();
栈 stack(queue minus?)
stack <int> s;
s.top();
s.push(x); s.pop(); s.empty();
集合set(vector plus?)
- 与线性容器vector不同,
set<int> s;
主要集中于元素的操作。 - s.insert(x) s.erase(x)
- s.find(x)
set<int>::iterator it; it = st.find(x);
s.count(x)返回0或1 - s.empty() s.size()
读大小还是用这个万能的函数
- 像数组一样 set也有begin()和end()
map(更复杂一点,迭代器返回的是一个class的地址)
初始化
- 增
std::map<int ,std::string> user;
user[0] = "a";//会覆写
map::iterator it = user.begin();//输出用 it->first ,it->second
auto it = user.begin();
- 查
using namespace std;
map<int,string>::iterator it; it = user.find(x);
if (it != user.end()){ user.erase(it);}
- 删
user.erase(x);
unordered_map ?
 ;map是有序的,键保证能比较大小,红黑树实现,占用空间高,适用于有序的结构。unordered_map 无序,哈希表实现,查找效率高。
- 增
tppedef bool (*foo)(const Obj& a, const Obj& b);//定义函数指针类型foo
bool f(const Obg& a, const Obg& b) {return a.value < b.value;
}
std::map<Obj ,std::string, foo> user(f);
user[0] = "a";//会覆写