STL中的常用容器

string

string 构造函数

string();
string(const string& str);
string(const char* s);
string(int n,char c);

赋值操作(运算符重载)

string& operator=(const char* s);
string& operator=(const string& s);
string& operator=(const char c);

string& assign(const char* s);
string& assign(const char* s, int n);//将字符串s的前n个字符赋给当前字符串
stirng& assign(int n,char c);//n个字符c
string& assign(const string& s);
string& assign(const string& s,int start,int n);//从start开始n个字符

存取操作

char& operator[](int n);
char& at(int n);

拼接操作

string& operator+=(const string& str);
string& operator+=(const char* str);
string& operator+=(const char c);
string& append(const char* s);
string& append(const char* s,int n);
string& append(const string& s);
string& append(const string& s,int pos,int n);
string& append(int n,char c);

string比较操作
都是const类型的成员函数,无法改变成员变量的值。

int compare(const string& s) const;
int compare(const char* s) const;

string查找和替换

int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const;  //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;  //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;  //查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s

string拼接操作

string& operator+=(const string& str);//重载+=操作符
string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=()
string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加n个字符c

string子串

string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串

vector

单端数组、动态数组

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void myPrint(int val){
    cout << val << endl;
}

int main(){
    vector<int> v = {1,2,3,4,5,6,7};
    //两种遍历方式
    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << endl;
    }
    for (vector<int>::iterator it=v.begin(); it!=v.end(); ++it) {
        cout << (*it) << endl;
    }
    for_each(v.begin(),v.end(),myPrint);	//需要引入algorithm,不能使用模板函数。
}

vector的 resizeswap

int main(){
    vector<int> v;
    for (int i=0; i<100000; i++) {
        v.push_back(i);
    }
    cout << v.size() << endl;
    cout << v.capacity() << endl;
    v.resize(3);	//用于将v的size重新变为3,但是由于在插入数据的过程中,vector会不断扩容,size变为3后,容量还是没有变,这样就有些浪费空间
    vector<int>(v).swap(v);	//swap的作用,就是重新根据当前的size确定容量capacity
    cout << v.size() << endl;
    cout << v.capacity() << endl;
}

vector api比较简单,和stirng很像,就不写了。

deque容器

vector容器是单端的,在头部插入数据,后面的元素需要移动,效率太低(本质是可扩容的数组)。
deque容器是双端的,在头部插入数据效率高,本质类似于哈希表。
在这里插入图片描述
deque不仅可以尾部插入,还可以头部插入

q.push_front(1);
q.push_back(2);
q.pop_front();
q.pop_back();

stack 和 queue

这两个就是数据结构里的栈和队列了,不提供迭代器,也没啥好说的

List

带头节点的双向链表,c++中的 vectorlist 相当于java里的ArrayList和linkedList

	int main(){
    list<int> l;
    l.push_front(1);
    l.push_back(2);
    
    list<int> l2;
    l2.assign(l.begin(),l.end());	//将l的值赋值到l2
    for (list<int>::iterator i = l2.begin(); i!=l2.end(); i++) {//迭代器的方式遍历,list不支持随机访问
        cout << *i << " " << endl;
    }
    
    l.pop_back();
    l.pop_front();
    l.reverse();	//链表反转
}

由于是链表,自然可以双向插入和删除
set简单,也不写

数据对 pair

 	pair<string, int> p("ttt",28);
    pair<string, int> p2 = make_pair("goldfish", 28);
    cout << p.first << endl;
    cout << p.second << endl;

set和map也很常见

实现方式无非为红黑树和哈希表,也没有什么好说的。
multi 代表可重复的意思
set、multiSet、hash_set、hash_multiSet
map、multiMap、hash_map、hash_multiMap

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值