C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
容器:特殊的数据结构,用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、
map 等。
迭代器:一种复杂的指针,支持各种复杂类型操作 运算符重载'。用于遍历对象集合的元素。这些集合可能是容器,
也可能是容器的子集。
算法:对元素数据做存取。作用于容器,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
C++ 官方文档:https://cplusplus.com/
单向数组,数组空间可扩容
从尾巴插入和删除效率高,也可以从中间插入删除,但是一般不建议使用
vector函数部分示例
/*===============================================
* 文件名称:vector.cpp
* 创 建 者:
* 创建日期:2023年09月11日
* 描 述:
================================================*/
#include
#include
#include
#include
using namespace std;
int main()
{
//push_back
std::vector<int> myvector;
int myint ;
for( int i =0 ; i < 6 ; i++ )
{
myvector.push_back(i);
}
cout<<"个数:"<<myvector.size()<<endl;
/*
//pop_back,back;
for(int i = 0 ; i < 3 ; i++ )
{
cout<
//iterator 迭代器
vector<int>::iterator it = myvector.begin();
while( it < myvector.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl;
//at
cout<<"at "<<myvector.at(1)<<endl;
//insert
it = myvector.end();
it = myvector.insert(it,100);
myvector.insert(it,2,200);
it = myvector.begin();
while( it < myvector.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl<<endl;;
//erase
myvector.erase(myvector.begin()+3);
myvector.erase(myvector.begin(),myvector.begin()+2);
it = myvector.begin();
while( it < myvector.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl<<endl;
//emplace
myvector.emplace(myvector.begin(),10101010);
myvector.emplace(myvector.end(),109807);
it = myvector.begin();
while( it < myvector.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl<<endl;
return 0;
}
双向链表
删除和插入可以在任意位置效率都很高
不能随机访问:不支持 at []
访问list一般情况都使用迭代器
list部分函数代码示例
/*===============================================
* 文件名称:list.cpp
* 创 建 者:
* 创建日期:2023年09月11日
* 描 述:
================================================*/
#include
#include
#include
using namespace std;
int main()
{
//push_back
list<int> mylist;
for(int i = 1 ; i < 8 ; i++ )
{
mylist.push_back(i);
}
cout<<"个数:"<<mylist.size()<<endl;
//迭代器iterator
for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
{
cout<<*it<<" ";
}
cout<<endl;
//迭代器rverse_iterator
for(list<int> :: reverse_iterator it = mylist.rbegin(); it != mylist.rend() ; it++)
{
cout<<*it<<" ";
}
cout<<endl;
//insert
list<int> :: iterator i = mylist.begin()++;
mylist.insert(i,100);
for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
{
cout<<*it<<" ";
}
cout<<endl;
//erase
list<int> :: iterator it = mylist.begin();
it = mylist.erase(++it);
it++;
mylist.erase(it, mylist.end());
for(list<int> :: iterator it = mylist.begin(); it != mylist.end() ; it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
set部分函数代码示例
/*===============================================
* 文件名称:set.cpp
* 创 建 者:
* 创建日期:2023年09月11日
* 描 述:
================================================*/
#include
#include
using namespace std;
int main()
{
set<int> myset;
set<int> ::iterator it;
//insert
for( int i = 1 ; i<8 ; i++)
{
myset.insert(i);
}
for( it = myset.begin(); it != myset.end() ; it++ )
{
cout<<*it<<" ";
}
cout<<endl;
//erase
myset.erase(4);
myset.erase(myset.begin());
it = myset.find(3);
myset.erase(myset.begin(),it);
for( it = myset.begin(); it != myset.end() ; it++ )
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
map部分函数代码示例
/*===============================================
* 文件名称:map.cpp
* 创 建 者:
* 创建日期:2023年09月11日
* 描 述:
================================================*/
#include
#include
using namespace std;
int main()
{
//insert()
map<char,int> mymap;
mymap.insert(pair<char,int>('a',1));
mymap.insert(pair<char,int>('b',2));
mymap.insert(pair<char,int>('c',3));
mymap.insert(pair<char,int>('d',4));
mymap.insert(pair<char,int>('f',1010));
mymap['e']=8848;//[]
mymap['g']=121;//[]
mymap['h']=10086;//[]
mymap['j']=10010;//[]
mymap['k']=9090;//[]
mymap.emplace('x',100);//emplace
mymap.emplace('y',200);
map<char,int>::iterator it;
//begin(),end()
for( it = mymap.begin(); it != mymap.end() ; it++)
{
cout<<it->first<<"=>"<<it->second<<endl;
}
//find
it = mymap.find('b');
cout<<endl<<"find:"<<it->first<<"=>"<<it->second<<endl<<endl;
//erase
mymap.erase(it);//b;
mymap.erase('c');
it = mymap.find('g');
mymap.erase(it,mymap.end());
for( it = mymap.begin(); it != mymap.end() ; it++)
{
cout<<it->first<<"=>"<<it->second<<endl;
}
//count
cout<<"a:"<<mymap.count('a')<<endl<<endl;
//key_comp
map<char,int>::key_compare mycomp = mymap.key_comp();
for(it = mymap.begin();it != mymap.end() ;it++ )
{
if(!mycomp(it->first,'d'))
{
cout<<"d:"<<it->first<<"=>"<<it->second<<endl<<endl;
break;
}
}
cout<<mymap.end()->first<<endl<<endl;
//value_comp
pair<char,int> h = *(--mymap.end());
for(it = mymap.begin();it != mymap.end() ;it++ )
{
if(!mymap.value_comp()(*it,h))
{
cout<<"f:"<<it->first<<"=>"<<it->second<<endl;
break;
}
}
return 0;
}
双向队列,存储方式采用分块存储
可以在头部和尾部进行快速插入和删除
支持随机存储
deque部分函数代码示例
/*===============================================
* 文件名称:deque.cpp
* 创 建 者:
* 创建日期:2023年09月11日
* 描 述:
================================================*/
#include
#include
using namespace std;
int main ()
{
//push_back
deque<int> mydeque;
for( int i = 1 ; i < 6; i++ )
{
mydeque.push_back(i);
}
//迭代器,begin()
deque<int>::iterator it = mydeque.begin();
for( int i=0 ; i < 5 ;i++ )
{
cout<<*(it+i)<<" ";
}
cout<<endl;
//迭代器,end()
deque<int>::iterator it1 = mydeque.end();
for( int i=1 ; i < 6 ;i++ )
{
cout<<*(it1-i)<<" ";
}
cout<<endl;
//迭代器,rbegin()
deque<int>::reverse_iterator it2 = mydeque.rbegin();
for( int i=0 ; i < 5 ;i++ )
{
cout<<*(it2+i)<<" ";
}
cout<<endl;
//at()
mydeque.at(4)=5555;
for( int i = 0 ; i < 5 ; i++ )
{
cout<<mydeque.at(i)<<" ";
}
cout<<endl;
//insert
it = mydeque.begin();
++it;
mydeque.insert(it,10);
for( it = mydeque.begin(); it != mydeque.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
it = mydeque.begin();
++it;
mydeque.insert(it,2,20);
for( it = mydeque.begin(); it != mydeque.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
it = mydeque.begin();
++it;
mydeque.insert(it,it+2,it+3);
for( it = mydeque.begin(); it != mydeque.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
//emplace
it = mydeque.emplace(mydeque.begin()+1,222);
mydeque.emplace(it,3333);
mydeque.emplace(mydeque.end(),8888);
mydeque.insert(it,it+2,it+3);
for( it = mydeque.begin(); it != mydeque.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}