C++ STL?看这篇就够啦。草履虫都能学会的STL教程!

C++中容器

  • 容器是什么?
  • string容器
    • 构造函数
    • 常见函数
  • vector容器
    • 与array的区别
    • 构造函数
    • 常见函数
    • 迭代器
      • 迭代器是什么?
  • deque容器
    • 实现原理
    • 常见函数
  • stack容器 栈
    • 常见函数
  • queue容器
    • 常见函数
  • list容器 链表
    • 链表的概念
    • list容器的迭代器
    • 常见函数
  • set/multiset容器
    • 二叉树
    • 常见函数
  • map/multimap容器
    • map和set的**区别**是:

容器是什么?

几乎可以说,任何特定的数据结构都是为了实现某种特定的算法。STL容器就是将运用最广泛的一些数据结构实现出来。
常用的数据结构:数组(array) , 链表(list), tree(树)栈(stack),** 队列(queue)**, 集合(set),映射表(map), 根据数据在容器中的排列特性,这些数据分为序列式容器和关联式容器两种。

  • 序列容器强调值的排序,每个元素有着固定的位置,比如vector,deque,list
  • 关联容器一般是树状结构,方便查找,强调键值对。键起到索引作用,比如map,set

string容器

c语言中char风格字符串(以空字符为结尾的字符组难以掌握),不适合大型程序的开发,所以在头文件内定义了一种string类。与char相比,string是个类而char是个指针,封装了更多的方法,不用考虑内存的释放和越界。

构造函数

string();//创建一个空的字符串 例如: string str;      
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n个字符c初始化 
string s(int beg,int end) //以区间beg;end(不包含end)内的字符作为字符串s的初值

常见函数

大小容量函数 作用
size(),length() 返回字符串长度
max_size() 返回当前字符串最多能包含的字符数
capacity() 重新分配内存之前 string所能包含的最大字符数
reserve() 为当前的string重新分配内存,参数为分配内存的大小
元素存取函数 作用
at(),[] 索引不会检查长度在str[str.length()]依然有效,返回值为’\0’
比较函数 作用
>,>=,<,<=,==,!= 按照字典顺序比较
compare() 返回0则相等,支持多参数
更改内容函数 作用
= 赋值
compare() 返回0则相等,支持多参数
assign(str,begin,end) 返回str[begin:end]的值
append() 往后面加字符
push_back() 加单个字符太常见了吧
insert(index,str) 索引index的位置加一个str
replace(1,2,str) 从索引为1开始后两个换成str
erase(7,5) 索引7的位置删除5个,如果形参2没有,默认从参数1索引后面删光
substr(5,6) 提取5到6的子串
find 查找
find_first_of 反 查找包含子串中的任何字符,返回第一个位置
find_first_not_of 查找不包含子串中的任何字符,返回第一个位置
find_last_of 查找包含子串中的任何字符,返回最后一个位置
find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置

vector容器

与array的区别

vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。
与array的区别:使用的 是动态空间,就算内容变动也会自动重新分配内存。两者在内存空间都是连续的内存空间。
动态增长的原理:如果空间不足会申请更大的内存空间,会拷贝到新空间,释放旧空间。

构造函数

vector<T> v; //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
vector(n, elem);//复制构造拷贝。
vector(const vector &vec);//拷贝构造。
vector<int> nVec(5,-1);//参数1是vector里面的数量1,参数是赋值
vector<string>str_vec{
   'a','b'}//注意“()”,“{}”的区别,()是函数,参数里面的是函数。因为是构造函数的形参。一般情况下创建空的然后往里面+数,类似于python中的append()。

std::vector<int>nVec;
for(int i = 0; i<5;++i)
    nVec.push_back(i);

常见函数

函数 作用
insert() 添加元素(函数重载过多次,可以看下面的应用)
push_back() 从后面加一个,效率高,不需要换地址的
pop_back() 删除
size() 大小操作是否为空
resize() 默认值填充,多的直接删除
capacity() 观察容量
vector<int

你可能感兴趣的:(c++,数据结构,java)