目录
迭代器(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++提供了大量能使我们快速便捷地处理数据的函数和方法。