C++常用STL

目录

迭代器(Iterator)

一、.Vector容器(类)

1.vector的定义

2.vector常用函数

3.vector遍历查询

 二、Queue队列(先进先出)

1.queue的定义

2.queue的常用函数

三、Map映射

1.map的定义

2.map的常用函数

3.map的遍历查询

四、Set容器

1.set的定义

2.set的常用函数

3.set的遍历查询

五、Stack栈(先进后出)

1.stack的定义

2.stack的常用函数

六、String

1.string的定义

2.string的常用函数 

3.string的遍历查询

总结


迭代器(Iterator)

迭代器是C++的知识,与C语言中的指针相似。

定义:迭代器是一种检查容器内元素并遍历元素的数据类型;迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。

迭代器和指针的区别:

容器和string有迭代器类型同时拥有返回迭代器的成员。

如:容器有成员 .begin() 和 .end(),其中 .begin() 成员复制返回指向第一个元素的迭代器,即指向第一个元素的“地址”,而 .end() 成员返回指向容器尾元素的下一个位置的迭代器。


一、.Vector容器(类)

线性表中有vector顺序表和list链表,两者作用比较相似。

vector是一个可变长度的数组,可作为数组使用。

1.vector的定义

#include<vector>      //引用头文件
vector<int> a;        //定义一个int类型的vector容器a
vector<int> b[100]    //定义一个int类型b数组在vector容器的每个空间中
vector<int>::iterator it;    //vector的迭代器,与指针相似

2.vector常用函数

a.size()         //返回实际长度(元素个数),O(1)复杂度
a.empty()        //容器为空返回1,否则返回0,O(1)复杂度
a.clear()        //把vector清空
a.begin()        //返回指向第一个元素的迭代器,*a.begin()与a[0]作用相同
a.end()          //越界访问,指向vector尾部,指向第n个元素再往后的边界
a.front()        //返回第一个元素的值,等价于*a.begin和a[0]
a.back()         //返回最后一个元素的值,等价于*--a.end()和a[size()-1]
a.push_back(x)   //把元素x插入vector尾部
a.pop_back()     //删除vector中最后一个元素
a.swap()         //交换内容
a.resize()       //改变容器中可存储元素的个数

3.vector遍历查询

//方式一
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
    cout<<*it<<endl;
//方式二
for(auto it=a.begin();it!=a.end();it++)
    cout<<*it<<endl;
//方式三
for(int i=0;i<a.size();i++)
    cout<<a[i]<<endl;

 二、Queue队列(先进先出)

1.queue的定义

#include<queue>     //需要引用头文件
queue<int>qi;       //定义一个int类型的queue容器qi
queue<string>qs;    //定义一个string类型的queue容器qs

2.queue的常用函数

q.front()    //返回 queue 中第一个元素的引用。
q.back()     //返回 queue中最后一个元素的引用。
q.push(const T& obj)    //在 queue 的尾部添加一个元素的副本。
q.pop()      //删除 queue 中的第一个元素。
q.size()     //返回 queue 中元素的个数。
q.empty()    //如果 queue 中没有元素的话,返回 true。

三、Map映射

1.map的定义

#include<map>         //需要引用头文件
map<char, int> m1;    //定义一个key值为char,value值为int类型数据

map是一个关联容器,他提供一对一的hash。在c++的内部实现自建一棵红黑树,这棵树具有自动排序功能,在map内部所有的数据都是有序的。

map<key,value> 变量名;
    ·第一个key值在map中只出现一次
    ·第二个value值在map中可出现多次

2.map的常用函数

//查看容量
map.size();    //查询map中有多少队元素
map.empty();   //查询map是否为空

//插入
map.insert(map_pair(key,value));
map.insert(pair<char,int>(key,value));
map[key]=value;

//取值
map[100];         //如果没有关键字100会是结果为空
map.at(100)="A"   //at会检查关键字,如果有关键字100,则报错

//查找
m.count(key);    //因为map中key只出现一次,所以count值为1或0
m.find(key);     //返回迭代器,判断是否存在

3.map的遍历查询

map<string, string>::iterator it;
for (it = mapSet.begin(); it != mapSet.end(); ++it)
{
    cout << "key" << it->first << endl;

    cout << "value" << it->second << endl;
}

四、Set容器

1.set的定义

set是一个基于红黑树实现的容器,它使用比较函数Compare自动将元素排序,并保持唯一性。

#include<set>  //需要引用头文件
set<int> s;    //定义一个int类型的set容器s

set<int>::iterator it;    //定义一个迭代器

2.set的常用函数

//插入
s.insert();     //插入数据

//查找
s.count();      //查找数据
s.find();       //寻找特定数据的元素

//删除
s.erase();      //擦除元素
s.clear();      //清除内容
s.swap();       //交换内容

//查看容量
s.size();       //返回容纳的元素数
s.empty();      //检查容器是否为空
        

3.set的遍历查询

for(set<int>::iterator it=s.begin();it!=s.end();it++)
        cout<<*it<<" ";

五、Stack栈(先进后出)

1.stack的定义

#include<stack>    //需要引用头文件
stack<int>s;

2.stack的常用函数

s.top();        //访问栈顶元素
s.empty();      //检查底层容器是否为空
s.size();       //返回容纳的元素个数
s.push();       //向栈顶插入元素 
s.pop();        //删除栈顶元素

六、String

1.string的定义

#include<string>    //需要引用头文件
string s;           //定义一个string名为s

2.string的常用函数 

s.size();           //返回string对象的字符长度
s.length();         //与s.size()相同作用
s.compare(s1);      //比较s和s1,s-s1>0返回1,s-s1<0返回-1,相同则返回0
s.push_back();      //在s的尾部插入一个字符
s.insert(pos,char); //在pos前插入char
s.begin();          //
s.end();            //
s.append(str);      //在s尾部拼接字符串str
s+=str;             //与append作用相似,在s尾部拼接str
s.substr(pos,n)     //截取从pos开始的n个字符
s.erase(iterator first,iterator last);        //删除从[first,last)上所有字符

3.string的遍历查询

string s1("abcdef"); // 调用一次构造函数
// 方法一: 下标法
for( int i = 0; i < s1.size() ; i++ ){
    cout<<s1[i];
}
cout<<endl;

// 方法二:正向迭代器
string::iterator iter = s1.begin();
for( ; iter < s1.end() ; iter++){
    cout<<*iter;
}
cout<<endl;

// 方法三:反向迭代器
string::reverse_iterator riter = s1.rbegin();
for( ; riter < s1.rend() ; riter++){
    cout<<*riter;
}
    


总结

以上就是今天要讲的内容,本文仅仅简单介绍了关于C++内置常用模板的使用,而C++提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++竞赛中,常用STL(Standard Template Library)组件有vector、stack以及算法函数next_permutation。vector是一个动态数组容器,可以方便地进行元素的插入、删除和访问。stack是一个后进先出(LIFO)的容器,常用于实现递归、深度优先搜索等算法。next_permutation是一个算法函数,用于按照字典序生成某个序列的所有排列。 在竞赛中,我们可以利用vector来存储元素,使用push_back函数添加元素,使用[]操作符或迭代器进行元素的访问。可以使用stack来模拟递归过程,实现一些深度优先搜索的问题。而使用next_permutation函数可以方便地生成某个序列的所有排列。 举个例子,如果我们想要按照字典序输出1到n的全排列,可以使用next_permutation函数结合vector来实现。首先,我们可以使用一个for循环将1到n的元素添加到vector中。然后,使用do-while循环来不断调用next_permutation函数,每次生成下一个排列并输出。最后,当next_permutation函数返回false时,表示已经生成了所有的排列,循环结束。 另外,如果我们需要使用栈来解决一些问题,可以使用stack容器。可以使用push函数将元素入栈,使用pop函数将元素出栈。栈的特点是后进先出,所以可以用来模拟递归过程或实现一些需要回溯的算法。 总结起来,在C++竞赛中,常用STL组件有vector、stack和算法函数next_permutation。vector可以方便地进行元素的插入、删除和访问,stack可以模拟递归过程,而next_permutation函数可以生成某个序列的所有排列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值