C++标准库(STL)

1. vector(变长数组)

  • 定义:vector<typename> name;
    注意:当typename为STL容器时,在两个>>之间加个空格,vector<vector<int> > name, 因为C++11之前编译器会把它当作移位操作。
    vector定义数组的方法:vector<typename> name[size]; 这样每个name[0]~name[size-1]都是一个vector容器,只是一维长度已经固定为size,另一维是可变的。

  • vector容器元素访问:
    (1)通过下标访问;
    (2)通过迭代器访问:迭代器类似指针,通过地址利用*获取元素,name[i]和*(name.begin() + i)都是一样的。迭代器的定义:vector<typename>::iterator it.
    注意:name.begin()是取vector首元素地址,name.end()是取尾元素地址的下一个地址;
    迭代器不支持<操作,所以一般用!=
    在常用的STL容器中,只有在vector和string中才允许使用迭代器+整数的写法。

  • 常用函数
    (1)v.push_back():在v后面加一个元素,时间复杂度o(1)
    (2)v.pop_back():在v后面删除一个元素,时间复杂度为o(1)
    (3)v.size():个数,时间复杂度为o(1)
    (4)v.clear():清空vector所有元素,时间复杂度为o(N),N为vector内元素个数
    (5)v.insert(it,x):向vector任意迭代器it处插入一个元素x,时间复杂度为o(N)
    (6)v.erase(it):删除迭代器为it处的元素
    v.erase(first, last):删除[first, last)内所有元素

2. set(内部自动有序 and 不含重复元素)

  • 定义:set<typename> name;
    set的数组定义:set<typename> name[size];

  • 元素访问:只能通过迭代器访问
    for(set<int> iterator it = s.begin(); it != s.end(); it++){printf(“%d”, *it};

  • 常用函数:
    (1)s.insert(x):将x插入s中,并自动排序和去重,时间复杂度为o(logN)
    (2)s.find(2):返回set中对应值为2的迭代器,时间复杂度为o(logN)
    (3)s.erase(it): it为所需要删除元素的迭代器,时间复杂度为o(1);
    s.erase(value): value为所需要删除元素的值,时间复杂度为o(logN);
    s.erase(first, last):删除[first, last)内所有元素
    (4)s.size(): 获得元素个数,时间复杂度为o(1)
    (5)s.clear():清空s中的所有元素,时间复杂度为o(N)

另外:unordered_set和set很像,唯一区别在于set会自行对存储的数据进行排序,而unordered_set不会排序。

3. string

  • 定义:string str;
  • 元素访问:
    (1)通过下标访问(输出整个字符串只能用cin和cout, 单个的字符可以用printf)
    (2)通过迭代器访问:string::iterator it;
  • 常用函数
    (1)s1+=s2:将s2直接拼接到s1后面
    (2)两个string类型的可以直接用==, !=, <, <=, >, >=,比较规则是字典序
    (3)s.length()和s.size():获取string长度
    (4)s.insert(pos, str): 在pos号位置插入字符串str
    s.insert(it, it2, it3):it为原字符串的欲插入位置, it2和it3为待插字符串的首尾迭代器,把[it2, it3)插入到it的位置
    (5)s.erase(it)
    s.erase(first, last)
    s.erase(pos, length): pos为需要开始删除的起始位置(int),length为删除的字符个数
    (6)s.clear()
    (7)s.substr(pos, len): 返回pos号位开始的,长度为len的子串
    (8)s.find(str2): 当str2为str的子串时,返回其在s中第一次出现的位置, 如果不是就返回string::npos(是个常数,本身值为-1,但是由于是unsigned_int类型,所以可认为是其类型的最大值,用以作为find函数失配时的返回值)
    s.find(str2, pos): 从s的pos号位开始匹配str2
    (9)s.replace(pos, len, str2): 把s从pos位开始长度为len的子串替换为str2
    s.replace(it1, it2, str2): 把s的迭代器[it1, it2)范围的子串替换为str2

4. map(映射, 会自动排序, 内部是红黑树,和set一样

  • 定义: map<typename1, typename2> mp;

  • 元素访问:
    (1)通过下标访问
    (2)通过迭代器访问:
    map<typename1, typename2> :: iterator it;
    it - > first访问键, it - > second访问键值

  • 常用函数
    (1)mp.find(key): 返回键为key的映射的迭代器,时间复杂度为o(logN)
    (2)mp.erase(it): it为要删除的元素的迭代器
    mp.erase(key): key为欲删除的映射的键
    mp.erase(first, last): 删除迭代器的[first, last)
    (3)mp.size(): 映射的对数
    (4)mp.clear(): 清空所有的元素

另外:unordered_map没有排序,并且通过key访问单个元素比map快

5. queue(先进先出)

  • 定义:queue<typename> name;
  • 元素访问:只能通过q.front()访问队首元素, 通过q.back()访问队尾元素
  • 常用函数:
    (1)q.push(x)
    (2)q.front(), q.back()
    (3)q.pop()
    (4)q.empty():返回true则空,返回false则非空
    (5)q.size()
    注意:使用front()和pop()函数之前,必须用empty()判断队列是否为空

6. priority_queue(队首元素一定是优先级最高的元素)

  • 定义:priority_queue<typename> name;
  • 元素访问:只能通过q.top()来访问队首元素
  • 常用函数:
    (1)q.push(x)
    (2)q.top()
    (3)q.pop()
    (4)q.empty()
    (5)q.size()

7. stack(后进先出)

  • 定义:stack<typename> name;
  • 元素访问:只能通过s.top()访问栈顶元素(最后一个)
  • 常用元素:
    (1)s.push(x)
    (2)s.top()
    (3)s.pop()
    (4)s.empty()
    (5)s.size()

8. pair(可以看作内部有两个可以指定类型的元素的结构体)

  • 定义:pair <typename1, typename2> name;
  • 元素访问:访问结构体一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值