C++ 学习笔记 stl

最近在网上自学C++ 看到容器这块觉着有点散 就自己打了一遍方便之后查询

string

构造函数

  • string() 创建空字符串
  • string(const char* s) 使用c语言字符串初始
  • string(const string& s) 拷贝构造 传入一个字符串 
  •  string(int n,char c) 使用n个字符c初始话字符串

赋值操作

  • string& operator= (const char* S) char*类型字符串 赋值给string
  • string& operator= (const string& S) 字符串S 赋值给string
  • string& operator= (const char c) 字符c 赋值给string
  • string&.assign(const char* S)   
  • string&.assign(const string& S)
  • string&.assign(const string& S,int n)  S的前n个字符赋值给当前字符串
  • string&.assign(int n,char c) 使用n个字符c初始话字符串

 拼接

  • string& operator+= (const char* S)
  • string& operator+= (const char* S,int n) S的前n个字符拼接于给当前字符串
  • string& operator+= (const string& S)
  • string&.append (const char* S)
  • string&.append (const char* S,int n) S的前n个字符拼接于给当前字符串
  • string&.append (const string& S)
  • string&.append (const string& S,int pos,int n) S中从第pos个开始的n个字符拼接于给当前字符串  

查找

  • int string&.fing(string s,int n) 从当前字符串第n个位置开始查找s 返回s第一出现的索引 没有返回-1 n的默认值为0
  • int string&.rfing(string s,int n) 同上 只是重右往左找
  • int string&.fing(string s,int pos,int n) 在当前字符串中从pos的位置开始查找s的前n个字符

替换

  • string&.replace(int pos,int n,string s) 从当前字符串的第pos个位置开始的n个字符替换为s

 比较

  • int string&.conmpare(const string &s) 当前字符与s比较字符串 比较每个字符的ascll码 相等返回0 小于返回-1 大于返回1

字符存取

  • string[int index] 读取与写入 string&.at(int index)   

插入和删除

  • string&.insert(int pos,const char* s) 在位置pos插入s
  • string&.insert(int pos,int n.char s) 在位置pos插入n个字符c
  • string&.erase(int pos, int n) 从位置pos起 删除n个字符

截取字符串

  • string string&.substr(int pos,int n) 从当前字符串的pos位置截取n个字符

 

vector

          可动态扩展 单端数组 从尾部插入删除元素方便 支持迭代器的跳跃随机访问(vector<T>::iterator+n)
 

构造函数

  • vector<T> v 
  • vector(v.begin(),v.end()) 填入另一个vctor的迭代器区间
  • vector(n,elem) n个elem
  • vector(const vector &vec) 拷贝构造 填入另一个vector容器

赋值操作

  • vector& operator= (const vector &vec) vec*类型 赋值给vector
  • vector&.assign(v.begin(),v.end())
  • vector&.assign(n,elem)

容量和大小

  • vector&.empty() 判断容器是否为空
  • vector&.capacity() 容器容量
  • vector&.size() 容器中元素个数
  • vector&.resize(int num) 重新指定容器长度为num 变长用默认值填充新位置 变短删除超出长度元素
  • vector&.resize(int num,elem )重新指定容器长度为num 变长用elem值填充新位置 变短删除超出长度元素

插入和删除

  • vector&.push_back(elem) 尾部插入元素elem
  • vector&.pop_back() 删除最后一个元素
  • vector&.insert(const_iterator pos,elem) 指定迭代器位置pos 插入元素elem
  • vector&.insert(const_iterator pos,int n,elem) 指定迭代器位置pos 插入n个元素elem
  • vector&.erase(const_iterator pos) 删除迭代器指向的元素
  • vector&.erase(const_iterator strat,const_iterator end) 删除迭代器区间的元素
  •  vector&.clear() 清空容器

数据存取

  • vector&.at(int index) 返回索引值index所指的元素
  • vector&[int index]   operator[],返回索引值index所指的元素
  • vector&.front() 返回容器中第一个元素
  • vector&.back() 返回容器中最后一个元素

容器数据互换

  • vector&.swap(vector& v) 当前容器元素与 容器v元素互换

预留空间

  • reserve(int len) 容器预留len个元素长度 没有数据 不可访问 当数据量过大时 避免系统多次重新开辟内存空间

 

deque 

        双端数组 头、尾部插入删除元素方便 支持迭代器的跳跃随机访问(deque<T>::iterator+n)
构造函数

  • deque<T> deq
  • deque(deq.begin(),deq.end()) 填入另一个deque的迭代器区间
  • deque(n,elem) n个elem
  • deque(const deque &deq) 拷贝构造 填入另一个deque容器

赋值操作

  • deque& operator= (const deque &deq) deq*类型 赋值给deque
  • deque&.assign(deq.begin(),deq.end())
  • deque&.assign(n,elem)

容量和大小

  • deque&.empty() 判断容器是否为空
  • deque&.size() 容器中元素个数
  • deque&.resize(int num) 重新指定容器长度为num 变长用默认值填充新位置 变短删除超出长度元素
  • deque&.resize(int num,elem )重新指定容器长度为num 变长用elem值填充新位置 变短删除超出长度元素

插入和删除

  • deque&.push_back(elem) 尾部插入元素elem
  • deque&.pop_back() 删除最后一个元素
  • deque&.push_front(elem) 头部插入元素elem
  • deque&.push_front() 删除第一个一个元素
  • deque&.insert(const_iterator pos,elem) 指定迭代器位置pos 插入元素elem
  • deque&.insert(const_iterator pos,int n,elem) 指定迭代器位置pos 插入n个元素elem
  • deque&.insert(const_iterator pos,const_iterator strat,const_iterator end) 指定迭代器位置pos 插入迭代器区间
  • deque&.erase(const_iterator pos) 删除迭代器指向的元素
  • deque&.erase(const_iterator strat,const_iterator end) 删除迭代器区间的元素
  • deque&.clear() 清空容器

数据存取

  • deque&.at(int index) 返回索引值index所指的元素
  • deque&[int index]   operator[],返回索引值index所指的元素
  • deque&.front() 返回容器中第一个元素
  • deque&.back() 返回容器中最后一个元素

排序

  • sort(const_iterator strat,const_iterator end) 给区间内的元素排序 全局函数 需添加标准算法头文件 #include <algorithm>支持随机访问的容器都可以用该算法

 

stack

      栈  后进先出
 

构造函数

  • stack<T> stk
  • stack(const stack &stk) 拷贝构造 填入另一个stack容器

赋值操作

  • stack& operator= (const stack &stk) stk 赋值给stack

容量和大小

  • stack&.empty() 判断容器是否为空
  • stack&.size() 容器中元素个数

数据存取

  • stack&.push(elem) 向栈顶添加元素elem
  • stack&.pop() 从栈顶移除第一个元素
  • stack&.back() 返回栈顶元素

queue  

        先进先出 一端新增 一端删除 不允许遍历  队头出 队尾入
 

构造函数

  • queue<T> que
  • queue(const queue &que) 拷贝构造 填入另一个queue容器

赋值操作

  • queue& operator= (const queue &que) que 赋值给queue

容量和大小

  • queue&.empty() 判断容器是否为空
  • queue&.size() 容器中元素个数

数据存取

  • queue&.push(elem) 向队尾添加元素elem 入队
  • queue&.pop() 从队头移除第一个元素 出队
  • queue&.front() 返回队头元素
  • queue&.back() 返回队尾元素

 

list

     非连续存储结构体由多个节点组成 每个节点有两个部分--数据域(存放数据)和指针域(指向下一节点的数据域) 方便任意位置快速插入 删除 修改
 

构造函数

  • list<T> l
  • list(l.begin(),l.end()) 填入另一个list的迭代器区间
  • list(n,elem) n个elem
  • list(const list &l) 拷贝构造 填入另一个list容器

赋值和交换

  • list& operator= (const list &l) l* 赋值给list
  • list&.assign(l.begin(),l.end())
  • list&.assign(n,elem)
  • list&.swap(lst) 将lst与本身的元素互换

容量和大小

  • list&.empty() 判断容器是否为空
  • list&.size() 容器中元素个数
  • list&.resize(int num) 重新指定容器长度为num 变长用默认值填充新位置 变短删除超出长度元素
  • list&.resize(int num,elem )重新指定容器长度为num 变长用elem值填充新位置 变短删除超出长度元素

插入和删除

  • list&.push_back(elem) 尾部插入元素elem
  • list&.pop_back() 删除最后一个元素
  • list&.push_front(elem) 头部插入元素elem
  • list&.push_front() 删除第一个一个元素
  • list&.insert(const_iterator pos,elem) 指定迭代器位置pos 插入元素elem 返回新数据位置
  • list&.insert(const_iterator pos,int n,elem) 指定迭代器位置pos 插入n个元素elem 无返回值
  • list&.insert(const_iterator pos,const_iterator strat,const_iterator end) 指定迭代器位置pos 插入迭代器区间 无返回值
  • list&.erase(const_iterator pos) 删除迭代器指向的元素
  • list&.erase(const_iterator strat,const_iterator end) 删除迭代器区间的元素
  • list&.clear() 清空容器
  • list&.remove(elem) 删除容器中所有elem

数据存取

  • list&.front() 返回第一个
  • list&.back() 返回最后一个元素

反转和排序

  • list&.reverse() 反转
  • list&.sort() 排序 默认从小到大

 

set

       元素在插入时自动排序 不能插入相同元素(multiset 和set一样 但是可以重复插入数据)
        

构造函数

  • set<T> s
  • set(const set &s) 拷贝构造 填入另一个set容器

赋值

  • set& operator= (const set &s) s* 赋值给set

插入和删除

  • set&.insert(elem) 插入元素elem

          返回一个 _PaerID (pari<iterator,bool>)    pari<set<T>iterator,bool> ret = s.insert(elem) if(ret.second) 插入成功 

  • set&.clear()
  • set&.erase(const_iterator pos) 删除迭代器指向的元素
  • set&.erase(const_iterator strat,const_iterator end) 删除迭代器区间的元素
  • set&.erase(elem) 删除元素

交换和大小 

  • set&.empty() 判断容器是否为空
  • set&.size() 容器中元素个数
  • set&.swap(set) 将lst与本身的元素互换

查找和统计

  • set&.find(elem) 找到返回迭代器pos 没找到返回set.end()
  • set&.count(elem) 统计元素elem的个数 没有返回0

*排序 在创建时可规定排序方法 在声明部分 加入一个仿函数名作为参数 set<T,Mycompare> s 重写 "()"
class Mycompare
{
public:
         bool operator() (int v1,int v2)
         {
               return v1 > v2;
         }
}

 

** 对组pair pair<type,type> p(type,type) -- pair<sting,int> p("name",19age)
            pair<type,type> p = make_pair(type,type) --pair<sting,int> p = make_pair("name",19age)
            使用p.first和p.second 访问

 

map和multimap

所有元素都是对组pair pari中的第一个元素key起到索引的作用 第二个元素为value 值 类似c#的字典 可快速根据key找到value   该数据结构在插入时根据 Pari的key自动排序 map不可以插入重复key值的元素 multimap可以

 

构造函数

  • map<T1,T2> m
  • map<T1,T2> m(const map &m)

插入

  • map.insrt(pari<T1,T2>(key,value)) 将匿名对组pari<T1,T2>(key,value)队组插入map

赋值

  • map& operator= (const map &m) m* 赋值给map

交换和大小

  • map&.empty() 判断容器是否为空
  • map&.size() 容器中元素个数
  • map&.swap(mp) 将mp与本身的元素互换

插入和删除

  • map&.insert(elem) 插入元素elem
  • map&.clear()
  • map&.erase(const_iterator pos) 删除迭代器指向的元素
  • map&.erase(const_iterator strat,const_iterator end) 删除迭代器区间的元素
  • map&.erase(ley) 删除key的元素

查找和统计

  • map&.find(key) 通过key 查找value 返回迭代器 map<T1,T2>::iterator mit
  • map&.count(key) 统计key的元素个数 

*排序 在创建时可规定排序方法 在声明部分 加入一个仿函数名作为参数 map<T1,T2,Mycompare> s    重写 "()"

             class Mycompare
             {
              public:
                    bool operator() (int v1,int v2)
                    {
                        return v1 > v2;
                    }
             }

 

stl 内建函数对象:包含头文件 <functional>
     

算数仿函数:

  • 加法: template<class T> T plus<T> 声明 plus<int>p; 应用 p(10.20);
  • 减法: template<class T> T minud<T> 
  • 乘法: template<class T> T multiplies<T> 
  • 除法: template<class T> T divides<T> 
  • 取模: template<class T> T modulus<T> 
  • 取反: template<class T> T negate<T> 

关系仿函数:

  • 等于:        template<class T> bool equal_to<T> 声明 equal_to<int> eq; eq(20,10);
  • 不等于:    template<class T> bool not_equal_to<T> 
  • 大于:        template<class T> bool greater<T> 
  • 大于等于: template<class T> bool greater_equal<T> 
  • 小于:        template<class T> bool less<T> 
  • 小于等于: template<class T> bool less_equal<T> 

逻辑仿函数:

  • 于: template<class T> bool logical_and<T> 
  • 或: template<class T> bool logical_or<T> 
  • 非: template<class T> bool logical_not<T> 


stl 常用算法:包含头文件 <algorithm> || <functional> || <numeric>
     

常用遍历算法:   <algorithm>   

  • for_each(iterator beign,iterator end, 仿函数()||普通函数() );    第三个参数可以在遍历时对数据做一些操作
  • transform(iterator beign,iterator end,iterator targetbeg,仿函数()||普通函数() );   将一个区间搬运到以目标容器 第一           个参数为目标容器的起始迭代器 第四个参数可以在遍历时对数据做一些操作
  • find(iterator beign,iterator end,value) ;     在区间内查找value值 返回迭代器 没找到返回 end
  • find_if(iterator beign,iterator end,谓词||普通函数() )  ;     [*谓词:返回bool类型的仿函数]  按条件查找 返回迭代器
  • adjacent_fing(iterator beign,iterator end) ;     区间内查找相邻重复元素 返回重复的第一个位置的迭代器
  • bool binary_search(iterator beign,iterator end,value) ;         查找数据是否存在 返回bool 必须在有序序列中使用
  • int count(iterator beign,iterator end,value);      统计指定数据个数

      常用排序方法:<algorithm>

  • sort(iterator beign,iterator end, 仿函数()||普通函数() );第三个参数可以改变默认排序方式
  • random_shuffle(iterator beign,iterator end);打乱容器顺序 需加随机种子 (srand(unsigned int)time(NULL))
  • merge(iterator beign1,iterator end1,iterator beign2,iterator end2,iterator tagerbeign) ;将两个容器的数据合并,并         放在一个新的容器中 者两个容器必须为有序
  • revers(iterator beign,iterator end);反转 首位对调

常用拷贝和替换算法:<algorithm>

  • copy(iterator beign,iterator end, iterator tagerbeign);区间内数据拷贝到目标容器
  • replace(iterator beign,iterator end,oldvalue,newvalue) ;区间内数据的所有oldvalu替换为newvalue
  • eplace(iterator beign,iterator end,仿函数()||普通函数(),newvalue) ;区间内所有符合函数条件的数据替换为newvalue
  • swap(container c1,container c2);容器c1 c2的所有数据互换 容量类型要相同

常用算数生成算法:<numeric>

  • accumulate(iterator beign,iterator end, value) ;区间内数据的和 value为起始值
  • fill(iterator beign,iterator end, value) ;区间内数据填充为value

常用集合算法:<algorithm>

  • set_intersection(iterator beign1,iterator end1,iterator beign2,iterator end2,iterator tagerbeign);求两个容器的交集并放入新容器  
  • set_union(iterator beign1,iterator end1,iterator beign2,iterator end2,iterator tagerbeign) ;求两个容器的并集并放入新容器
  • set_difference(iterator beign1,iterator end1,iterator beign2,iterator end2,iterator tagerbeign) ;求两个容器的差集并放入新容器 (*求第一个容器与第二个容器的差集!=求第二个容器与第一个容器的差集)

** 上诉所有涉及到要新建容器的时 不要忘记申请容器大小。

 

 


*/

 

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值