standard template library
STL将原来常用的容器和操作进行封装,增加了C++的编码效率
string #include
vector #include
list #include
stack #include
queue #include
set #include
map #include
容器和算法之间的粘合剂,可以类比指针
sort()
max_element()
min_element()
向量数组(动态数组)
底层是静态数组
没有给向量数组分配空间不能向里面输入值
下面代码错误,因为向量数组v还没有分配空间
会造成非法访问内存空间的段错误
void text1_01(){
int n;cin>>n;
vector v;
for(int i=0;i<=n;i++){
cin>>v[i];
//错误,因为向量数组v还没有分配空间
//会造成非法访问内存空间的段错误
}
for(int i=0;i<=n;i++){
cout< v.push_back()方法是分配空间的同时插入数据
v.pop_back()方法删除数据后,它的size大小也跟着改变
#pragma once
#include
#include
#include
using namespace std;
void text1_01(){
int n;cin>>n;
vector v;
cout<<"大小:"<>x;
v.push_back(x);//不但插入数据,而且还分配空间
}
for(int i=0;i 

void text1_01(){
int n;cin>>n;
vector v(n+1);//分配n个int大小的空间,并且初始化为0
for(int i=1;i<=n;i++){
cout< 
void text1_01(){
int n;cin>>n;
vector v(n+1,100);//分配n个int大小的空间,并且初始化为val
for(int i=1;i<=n;i++){
cout< #include
void text01(){
vector v={1,2,3,4,5,6,7,8,9,10};
}
void text1_01(){
int n;cin>>n;
vector v(n+1,100);//分配n个int大小的空间,并且初始化为0
for(int i=1;i<=v.size()-1;i++){
cin>>v[i];
}
for(int i=1;i<=v.size()-1;i++){
cout< v.begin()是指向数组首元素的迭代器
v.end()是指向数组为元素下一位的迭代器,充当结束的标志(无效迭代器)
vector::iterator iter=v.begin()+1
auto iter=v.begin()+1
void text1_01(){
int n;cin>>n;
vector v(n+1,100);//分配n个int大小的空间,并且初始化为0
for(int i=1;i<=v.size()-1;i++){
cin>>v[i];
}
//迭代器可以类比为指针类型
//vector::iterator iter=v.begin()+1;
for(auto iter=v.begin()+1;iter!=v.end();iter++){
cout<<*iter<<" ";
}
cout< #include
vector v={1,2,3,4,5,6,7,8,9,10};
void text01(){
for(auto it:v){
cout< 
void text2_01(){
//vector v(count,val)-->申请count个Type大小的val
// vector v0;//没有分配空间
int n;cin>>n;
vector v0;
vector v1{1,2,3,4,5,6,7,8,9,10};
vector v2(n);
vector v3(n,10);
//内置函数push_back()分配空间的同时插入数据
cout<<"输入vo:"<>x;
v0.push_back(x);
}
cout<<"push_back输入的for range打印 vo:"<>it;
}
cout<<"for range打印 v2:"< v.erase()
v.insert()
STL中单反涉及迭代器区间的都是左闭右开
void text1_01(){
vector v{1,2,3,4,5,6,8,9,10};//分配n个int大小的空间,并且初始化为0
//迭代器可以类比为指针类型
//vector::iterator iter=v.begin()+1;
v.erase(v.begin());
for(auto it:v){
cout< v.at(i)的定位器和v[i]的区别
v.at(i)定位器如果越界的话会抛出异常
v[i]越界的话会报错

void text1_01(){
vector v{1,2,3,4,5,6,8,9,10};//分配n个int大小的空间,并且初始化为0
int i;cin>>i;
cout< v.back();//输出数组的最后一位
v.size()
v.capacity()
void text1_01(){ vectorv{1,2,3,4,5,6,7,8,9,10};//分配n个int大小的空间,并且初始化为0 v.erase(v.begin()+9); cout<
- 1
- 2
- 3
- 4
- 5
- 6
参数有俩种形式 一种是 参一:首元素地址,参二:尾元素地址的下一位,参三:比较规则
另外一直是,参一:指向首元素的迭代器,参二:指向为元素下一位的迭代器,参三:比较规则
STL里面的容器元素使用sort排序必须穿迭代器,例如string、vector数组
但是非STL容器,sort排序可以不穿迭代器,例如string【】数组,int nums【】数组
string s="hello world";
bool cmp(int left,int right){
return left>right;
}
void text1_01(){
vector v{1,2,3,4,5,6,7,8,9,10};//分配n个int大小的空间,并且初始化为0
sort(v.begin(),v.end(),cmp);
for(auto it:v){
cout< 

void text1_01(){
vector v{5,1,3,2,6,8,1,23,4,9};//分配n个int大小的空间,并且初始化为0
sort(v.begin(),v.end());
for(auto it:v){
cout< 因为即使传入了begin end 迭代器,但是链表是不连续的,所以无法完成排序
bool cmp(int left,int right){
return left>right;
}
void text2_01(){
list ls{5,4,3,2,1,6,7,8,9,10};
// sort(ls.begin(),ls.end());
// ls.sort();
// for(auto it:ls){
// cout< bool cmp(int left,int right){
return left>right;
}
void text2_01(){
list ls{5,4,3,2,1,6,7,8,9,10};
// sort(ls.begin(),ls.end());
// ls.sort();
// for(auto it:ls){
// cout< void text2_01(){
list ls{5,4,3,2,1,6,7,8,9,10};
auto p=ls.begin();
int key;cin>>key;
while(*p!=key){
p++;
}
ls.erase(p);
for(auto it:ls){
cout<>n;
// list ls(n,10);
// for(auto it:ls){
// cout<>x;
// ls.push_back(x);
// }
// for(auto it:ls){
// cout<iter=iter->next
// for(auto iter=ls.begin();iter!=ls.end();iter++){
// cout<<*iter<<" ";
// }
}
void text2_01(){
stack stk;
stk.push(1);stk.push(2);stk.push(3);stk.push(4);
while(!stk.empty()){
cout<