1,二维的vector如何初始化?
直接初始化 vector<vector<int>>v={{...},{....},{...}};
或 vector<vector<int>>v(n,vector<int>(n,0));
resize函数初始化赋值 v.resize(n,vector<int>(n));
2,哈希总结
①map:提供一对一hash,有序(自动排序),内部是红黑树。key---value
常用函数:
map<int,int>mp;
begin() 返回指向map头部的迭代器
end() 返回指向map末尾的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数(因为key值不会重复,所以只能是1 or 0)
empty() 如果map为空则返回true
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
mp.insert();
//第二行等效于:
mp[0]=1;
mp[1]=2;
mp[2]=3;
//注:如果某个位置有值,insert不可直接插入,而用数组方式赋值时可直接覆盖。
mymap.insert(make_pair(3, "c")):根据传入的两个参数,直接构造成一个pari对象,insert到map中。
mymap.insert(pair<int, string>(4, "d")):可以使用pari方法插入kv对。
②unordered_map:无序
根据key查找单个value,无序,比map效率高,内存占用高。
③set:就是集合,每个元素有序(以int为例默认升序,所以不能直接改变元素值)且只出现一次(底层通常为平衡二叉树)。允许存储任何类型唯一值,无论原始值还是对象引用。时间复杂度:O(log2 n)。如果想改变元素的值,必须先删除该元素,再插入新的元素。
默认升序:
set<int>q;
降序:
set<int,greater<int>>q;
set中erase的用法:
q.earase(x);//删除q中x,删除成功返回1,失败(set中不存在x)返回0;
④unordered_map:集合,元素无序,且元素互异。增删改查时间复杂度为O(n);
3,STL中value_type的含义?
value_type 是用来表示迭代器所指对象的类别的。
4,stack
常用操作
stack<int>q;
int x;
q.push(x);
q.top();//返回栈顶元素
q.pop();//弹出栈顶元素
q.size();
q.empty();
5,lowbit(x)函数
返回一个将x转换为二进制的从右往左第一个1的数
int lowbit(int x)
{
return x&(-x);
}