首页 > 编程学习 > STL常用容器(一)

STL常用容器(一)

发布时间:2022/1/17 12:20:24

1. string容器

#include<string>
1. 四种字符串初始方法
2. 赋值方法
String& assign(const char *s); //将字符串s赋值给当前的字符串
string& assign(const char *s, int n); //把自负床的前n个字符赋值给当前的字符串
string& assign(const string &s); //把字符串s赋值给当前字符串
string& assign(int n, char c); //用n个字符c赋值给当前字符串

3. 拼接方法
string& append(const char *s); //把字符串s连接到当前的字符串结尾
string& append(const char *s, int n); //把字符串s的前n个字符连接到当前的字符串结尾
string& append(const string &s); //同operator+=(const string& str)
string& append(const string &s,int pos, int n); // 字符串s中从pos开始的n个字符连接到字符串结尾

4. 查找和替换
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
总结:
(1).rfind 和 find 的区别: rfind是从右往左查找, find是从左往右查找
(2).find找到字符串后返回查找的第一个字符位置,找不到返回-1
(3).replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串

5. 字符串比较:是按字符串的ASCLL码进行对比
str1.compare(str2)
// ==0, str1==str2
// >0, str1>str2
// <0, str1<str2
	
6. 字符存取
string str = 'hello';
str.size() 返回字符串长度
(1).通过[]访问单个字符
    str[i], i = 0,1,2,...
(2).通过at方式访问单个字符 
    str.at(i)

7. string插入和删除
string& insert(int pos, const char *s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos,int n,char c); //在指定位置插入n个字符c
string& erase(int pos, int n= npos); //删除从pos开始的n个字符

8. string子串:从字符串中获取想要的子串
string substr(int pos, int n = npos) const; //返回由pos开始的n个字符组成的字符串

2. vector容器

1. vector容器构造
   (1). 默认构造函数: vector<类型> v1;
   (2). ()区间方式构造: vector<类型> v2(v1.begin(), v1.end());
   (3). ()n个elem方式构造: vector<类型>v3(n, elem);
   (4). 拷贝构造函数: vector<类型>v4(const vector&v);

2. vector赋值操作
   (1). 等号直接赋值,,使用vector<类型>直接操作;
   (2). 使用assign区间赋值: assign(beg, end);[beg, end)区间中的数据拷贝到本身;
   (3). 使用assign进行赋值: assign(n, elem);  将n个elem复制到本身。

3. vector容量和大小
   (1). v1.empty() //判断vector<int>中的元素是否为空
   (2). v1.capacity() //查看当前vector中的最大元素存放个数
   (3). v1.size() //查看当前vector中的元素个数
   (4). v1.resize() // 对vector中元素个数的数量进行重新的设置

4. vector插入和删除
   (1). push_back(elem);  // 尾部插入元素elem
   (2). pop_back();   //删除最后一元素
   (3). insert(const_iteartor pos, elem) ; // 迭代器指向位置pos插入元素elem
   (4). insert(const_iteartor pos, int count, elem); // 迭代器指向位置pos插入count个元素elem
   (5). erase(const_iteartor pos); // 删除迭代器指向的元素
   (6). erase(const_iteartor start, const_iteartor end); //删除迭代器从start到end之间的元素
   (7). clear() ; // 删除容器中的所有元素

5. vector数据存取
   (1). at(int idx); //返回索引idx所指的数据
   (2). operator[]; //返回索引idx所指的数据
   (3). front(); //返回容器中第一个数据元素
   (4). back(); //返回容器中最后一个数据元素

6. vector互换容器
   	swap(vec); // 将vec与本身的元素互换
   	
7. vector预留空间
   ​	reserve(int len); // 容器预留len个元素长度,预留位置不初始化,元素不可访问。



3. deque容器

功能: 双端数组,可以对头端进行插入删除操作

deque与vector区别:

- vector对于头部的插入删除效率低,数据量越大,效率越低

- deque相对而言,对头部的插入删除速度会比vector更快

- vector访问元素时的速度会比deque快,这和两者的内部有关


1. deque构造函数
   (1). deque<T> deqT;  // 默认构造函数
   (2). deque(beg, end);  // 构造函数将[beg, end]区间中的元素拷贝给本身
   (3). deque(n, elem); //  构造函数将n个elem拷贝给本身
   (4). deque(const deque &deq);  // 拷贝构造函数
   当需要限定一个函数中的deque<T>参数为只读形式时,需要加const进行修饰, 那么在下面要遍历时,迭代器需要成为const_iteartor

2. deque赋值操作
   (1). deque& operator=(const deque &deq);  // 重载等号操作符
   (2). assign(beg, end); // 将[beg, end]区间中的数据拷贝给本身
   (3). assign(n, elem); // 将n个elem拷贝给本身

3. deque容器大小操作
   (1). deque.empty();    // 判断容器是否为空
   (2). deque.size();   //  返回容器中元素的个数
   (3). deque.resize(num);   // 重新指定容器的长度为num, 若容器变长,则已默认值填充新位置。 如果容器变短,则末尾超出容器长度的元素被删除
   (4). deque.resize(num, elem);  // 重新指定容器的长度为num, 若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器的部分元素被删除。

4. deque插入和删除
   (1). 两端插入操作:
      - push_back(elem); // 在容器尾部添加一个数据
      - push_front(elem); // 在容器头部插入一个数据
      - pop_back(); // 删除尾部最后一个元素
      - pop_front(); // 删除头部第一个元素

   (2). 指定位置操作:
      - insert(pos, elem); // 在pos位置插入一个elem元素的拷贝,返回新数据的位置
      - insert(pos, n, elem); // 在pos位置插入n个elem数据,无返回值
      - insert(pos, beg, end); // 在pos位置插入[beg, end]区间的数据。无返回值
      - erase(beg, end); // 删除[beg, end]区间的数据,返回下一个数据的位置
      - erase(pos); // 删除pos位置的数据,返回下一个数据的位置。
      - clear(); // 清空容器的所有数据

   (3). deque数据存取
      	对deque中的数据进行存取操作
      - at(int id); // 返回索引id所指的数据
      - operator[]; // 返回索引id所指的数据
      - front(); // 返回容器中第一个数据元素
      - back(); // 返回容器中最后一个数据元素

   (4). deque排序
      ​	利用算法实现对deque容器进行排序(默认升序)
      - sort(iterator beg, iterator end); // 对[deg, end]区间中的元素进行排序

4. stack容器

基本概念: stack是一种先进后出的数据结构,只有一个出口

栈中只有顶端的元素才可以被外界使用,因此栈不允许遍历

功能描述: 栈容器常用的对外接口

1. 构造函数:
   - stack<T> stk;  // stack采用模板类实现,stack对象的默认构造形式
   - stack(const stack &stk); // 拷贝构造函数
2. 赋值操作:
   - stack& operator(const stack &stk); // 重载等号操作符
3. 数据存取: 
   - push(elem); // 向栈顶添加元素
   - pop();  // 从栈顶移除第一个元素
   - top(); // 返回栈顶元素
4. 大小操作:
   - empty(); // 判断堆栈中是否为空
   - size(); // 返回栈的大小
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000