----------------------------vector----------------------------
是一个可以动态分配内存的数组,需要头文件 #include <vector>
初始化
常见函数的使用
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针(迭代器常用)
vector<int>::iterator it1 = vec1.begin();
5.end 得到数组的最后一个单元+1的指针(与begin一对)
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8. .size()元素个数
vector<int>obj;//创建一个向量存储容器 int类型
for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
{
obj.push_back(i);
cout<<obj[i]<<",";
}
obj.pop_back();//去掉数组最后一个数据
for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
{
...............;
}
9.clear()清除容器中所有数据
10.排序 sort(obj.begin(),obj.end());//从小到大
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转后的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
20. reverse(obj.begin(),obj.end());//反转
21.vector 去重 unique函数去重
unique()函数将相邻且重复的元素放到vector的尾部 然后返回指向第一个重复元素的迭代器再用erase函数擦除从这个元素到最后元素的所有的元素。
所以可以先进行排序,这样重复元素就会堆一起了,调用unique()函数,再调用erase函数删除重复。
sort(vec.begin(), vec.end());
vec.erase(unique(vec.begin(), vec.end()), vec.end());
----------------------------map-----------------------------
map
map是STL的一个关联容器,它提供一对一的hash。第一个可以称为关键字(key),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(value);
map本质就是红黑树,存入数据会自动排序。注意key值必须唯一!
map会自动建立一 一对于的关系,类型任意
头文件为#include <map>
map初始化:
map<int, string> map1;
map的插入
第一种 用insert函数插入pair
map1.insert(pair<int, string>(1, "first"));
// map和pair的关系
1,pair:pair是一种模版类型。每个pair 可以存储两个值。这两种值的类型没有限制,如果一个函数有两个返回值的话,并且是不同类型的两个属性的话,就可以用pair 进行操作。
2.map可以当做一个容器,而pair可以理解为元素(放入到容器的的每个个体),pair并没有单独行动的典型用法,正常都是配合map来使用(即把pair这个元素插入到map这个容器里面)。
//这种写法存在不成功的情况!慎用!
第二种 用insert函数插入value_type数据
mapS1t.insert(map<int, string>::value_type(2, "second"));
这个个人理解就是:value_type实际上就是一个pair用它可以给map插入一些值。
map的遍历
for (map<string, string>::iterator iter = myMap.begin(); iter != myMap.end(); ++iter) {
cout << iter->first << " " << iter->second << endl;
map的查找
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
map<string, string>::iterator iter = myMap.begin();
iter = myMap.find("1");
if(iter !=myMap.end())
cout<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
map的删除
//迭代器刪除
iter =myMap.find("123");
myMap.erase(iter);
//用关键字刪除
int n = myMap.erase("123"); //如果刪除了會返回1,否則返回0
//用迭代器范围刪除 : 把整个map清空
myMap.erase(myMap.begin(), myMap.end());
//等同于mapStudent.clear()
常见函数:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数 ( 因为key值不会重复,所以只能是1 or 0)
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对//equal_range()是c++中内置的二分查找算法必须有序该算法才能得到正确结果否则只会返回查找元素的以一个位置和最后一个位置 其返回的为一个对组分别为迭代器类型
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数