C++面试笔试——STL

STL(Standard Template Library,标准模版库)主要由容器(container)、迭代器(iterator)和算法(algorithm)三部分组成,其中封装了数据结构中的大部分内容。

STL中sort函数:直接使用sort迭代器进行排序。

#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    int a[]={1,9,-5,0,9,45,2};
    sort(a,a+7);
    for(int i=0;i<7;i++){
        cout<<a[i]<<endl;
    }
    return 0;
}

#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    string s="452155641321789";
    sort(s.begin(),s.end());
    cout<<s<<endl;
    return 0;
}

 int main(){
    string s="452155641321789";
    sort(s.begin(),s.end());
    cout<<s<<endl;
    s.erase(s.begin());      //清楚掉字符串首字母
    cout<<s<<endl;
    s.erase(--s.end());    //清除掉字符串最后一个字符,s.end指向最后一个字符的后一个,所以最后一个字符必须是--s.end
    cout<<s<<endl;

    s=s.substr(2,3);
    cout<<s<<endl;    //取字符串中下表为2的字符后3个
    return 0;
}

 STL中获取一行字符:+=对字符串会转化为ASC码从而参与运算

#include<iostream>
using namespace std;

int main(){
    string a;
    getline(cin,a);       //
    cout<<a<<endl;
    return 0;
}

*************************************************************************************************************************************************

接着更,刚才碰到一篇比较好玩的帖子:https://www.cnblogs.com/ztz11/p/9296584.html

set(特点:插入后元素自动从小到大排序)

set< int > ::iterator it;//迭代器,可以指向同类型的集合

q.find(k);//其中一个元素k的地址

q.count(k);//k的个数

q.erase(k);//删除所有值为k的元素

q.erase(it);删除it指向的地址和元素

#include <bits/stdc++.h>
using namespace std;
int main()
{ 
   multiset<int> q; 
   multiset<int>::iterator it;
    for(int i=0;i<15;i+=3){
        q.insert(i); 
   } 
   for(it=q.begin();it!=q.end();it++){ 
       cout<<*it<<endl;   
 }
//**************查询相同的个数****************//    
cout<<(int)q.count(5);    
cout<<"结束"<<endl;
//**************删除所有5****************//    
q.erase((5));  
for(it=q.begin();it!=q.end();it++){            
cout<<*it<<endl;       
 }    
it=q.end();    
q.erase(--it);    
it=q.lower_bound(9);cout<<*it<<endl;    
it=q.upper_bound(9);cout<<*it<<endl;  
 return 0;
}

Vector:

sort(q.begin(),q.end())//对vector里的元素进行排序
q.erase(unique(q.begin(),q.end()),q.end()); //截取重复的元素
q.insert(q.begin()+i,a);//在第i+1个元素前插入a 
q.erase(q.begin()+i,q.begin()+j);//删除区间[i,j)内元素 (区间从0开始)

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

vector<int>v;
int main()
{
    for(int i=1;i<15;i+=3){
        v.push_back(i);
    }
    v.push_back(2);v.push_back(5);v.push_back(2);
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
    cout<<"排序**************************"<<endl;
    sort(v.begin(),v.end());
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
    cout<<"删除重复项**************************"<<endl;
    v.erase(unique(v.begin(),v.end()),v.end());
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
    cout<<"在第i+1位置插入3**************************"<<endl;
    v.insert(v.begin()+1,3);
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
    cout<<"删除区间(0,3)上的所有元素**************************"<<endl;
    v.erase(v.begin()+0,v.begin()+3);
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<endl;
    }
   return 0;

}

优先队列在上述链接中博主讲的很详细

Stack栈

常用操作:插入删除取栈顶,栈较为常用简单不多解释。

#include <bits/stdc++.h>
using namespace std;
int main(){
    stack<int>s;
    s.push(1);
    s.push(2);
    s.push(3);
    s.push(4);
    while(!s.empty()){
        cout<<s.size()<<endl;
        int k=s.top();
        cout<<k<<endl;
        s.pop();
    }
    return 0;
}
 

 普通队列queue

先进先出,队尾增加,队首删除

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
    queue<int>q,q1;
    for(int i=0;i<10;i++){
        q.push(i);
    }
    for(int i=9;i<19;i++){
        q1.push(i);
    }
    cout<<q.front()<<" "<<q.back()<<endl;
    cout<<q.empty()<<" "<<q.size()<<endl;
    q.swap(q1);    //交换两个队列中的所有元素
    cout<<"q1:"<<q1.front()<<"    "<<"q:"<<q.front()<<endl;
}
 

 map:

map的基本操作函数:

     C++ maps是一种关联式容器,包含“关键字/值”对

     begin()         返回指向map头部的迭代器

     clear()        删除所有元素

     count()         返回指定元素出现的次数

     empty()         如果map为空则返回true

     end()           返回指向map末尾的迭代器

     equal_range()   返回特殊条目的迭代器对

     erase()         删除一个元素

     find()          查找一个元素

     get_allocator() 返回map的配置器

     insert()        插入元素

     key_comp()      返回比较元素key的函数

     lower_bound()   返回键值>=给定元素的第一个位置

     max_size()      返回可以容纳的最大元素个数

     rbegin()        返回一个指向map尾部的逆向迭代器

     rend()          返回一个指向map头部的逆向迭代器

     size()          返回map中元素的个数

     swap()           交换两个map

     upper_bound()    返回键值>给定元素的第一个位置

     value_comp()     返回比较元素value的函数

#include <bits/stdc++.h>
#include <map>
using namespace std;
int main(){
   map<int,string>stu;
   stu.insert(pair<int,string>(1,"zhangsan"));
   stu.insert(pair<int,string>(2,"lisi"));
   stu.insert(pair<int,string>(3,"wangwu"));
   map<int,string>::iterator it;
   for(it=stu.begin();it!=stu.end();it++){
       cout<<it->first<<"  "<<it->second<<endl;
   }
   it=stu.find(3);
   if(it!=stu.end()) cout<<it->second<<endl;
   else cout<<"do not find"<<endl;
   cout<<stu.count(2)<<endl;;
 
   return 0;
}
 

 ************************************************************************************************************************************************更于2.16,有时间继续更

参考:这几位大佬:

https://blog.csdn.net/u013550000/article/details/80521509

https://blog.csdn.net/sinat_40872274/article/details/81149852

https://www.cnblogs.com/ZY-Dream/p/10037931.html

发布了15 篇原创文章 · 获赞 8 · 访问量 912

猜你喜欢

转载自blog.csdn.net/caicai779369786/article/details/104219042
今日推荐