目录
1.vector(向量)
#include<iostream>
#include<algorithm>
#include<numeric> accumulate的头文件
#include<vector>//向量
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
///3种定义方式
vector<int > a;//定义一个向量
//vector<int > a(100);//定义了一个长度为100的向量
//vector<int > a(100,90);//定义了一个长度为100且每个数据都是90的向量
for(int i=1;i<10;i++)
a.push_back(i);
vector<int > ::iterator it;//定义迭代器,类似于指针
sort(a.begin(),a.end(),cmp);
for(it=a.begin();it!=a.end();it++) //用迭代器访问vector元素
cout<<*it<<" ";
cout<<endl;
/*for(int i=0;i<10;i++) //下标访问vector元素
cout<<a[i]<<" ";*/
//accumulate算法的第一个用法:求和
cout<<accumulate(a.begin(),a.end(),0)<<endl;
//accumulate算法的第二个用法:计算连乘积
cout<<accumulate(a.begin(),a.end(),1,multiplies<int>( ))<<endl;
cout<<endl;
return 0;
}
元素的插入
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v(3);
v[0]=2;
v[1]=7;
v[2]=9;
//在最前面插入新元素,元素值为8
v.insert(v.begin(),8);
//在第2个元素前插入新元素1
v.insert(v.begin()+2,1);
//在向量末尾追加新元素3
v.insert(v.end(),3);
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
//输出结果:8 2 1 7 9 3
return 0;
}
元素的删除:
erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。
clear()方法则一次性删除vector中的所有元素。
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> v(10);
for(int i=0;i<10;i++)
v[i]=i;
//删除第二个元素,从0开始计数
//v.erase(v.begin()+2); //2被删除了
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
//删除迭代器第1到第5区间的所有元素
v.erase(v.begin()+1,v.begin()+5); //删除了下标[1,5)的元素,左闭右开
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
//清空向量
v.clear();
//输出向量的大小
cout<<v.size()<<endl;
return 0;
}
使用reverse反向排列算法
#include<iostream>
#include<vector>
#include<algorithm> //reverse的头文件
using namespace std;
int main(){
vector<int> v(10);
for(int i=0;i<10;i++)
v[i]=i;
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
//反向排列向量从首到尾间的元素
reverse(v.begin(),v.end());
for(it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
cout<<endl;
//清空向量
v.clear();
//输出向量的大小
cout<<v.size()<<endl;
return 0;
}
2.string 点击这里,获得更多内容(string类)
#include<iostream>
#include<vector>
#include<string>//string类
using namespace std;
int main()
{
string str[7];
str[0]="abcd100";
cout<<str[0]<<endl;
for(int i=1;i<7;i++)
{
str[i]=str[0].substr(i);
cout<<str[i]<<endl;
/*abcd100
bcd100
cd100
d100
100
00
0*/
}
/*string str="abcd";
vector<string >num;
for(int i=0;i<3;i++)
{
cin>>str;
num.push_back(str);
}
for(int i=0;i<3;i++)
{
cout<<num[i][2]<<endl;
}*/
/*cout<<str.find('b');//1 查找 返回'b'在字符串中的下标
cout<<str.find("bc");//1 查找 返回'b'在字符串中的下标*/
/*str="";//清空操作
cout<<str<<endl;*/
/*str+="66666";//字符串连接
cout<<str<<endl;
str="333333";//字符串赋值
cout<<str<<endl;*/
///插入删除
/*str="gkcksles";
string::iterator it;//任何一个容器都是有迭代器的
it=str.begin();
str.insert(it+2,'0');//在下标2之前插入一个字符'0'
str.erase(it+1);//删除下标为1的字符,如果大量的删除,可循环删除
cout<<str<<endl;*/
return 0;
}
3.set点击打开链接,查看更多set用法(集合)
#include<set>//集合
#include<iostream>
using namespace std;
int main()
{
set<int >s;
for(int i=10;i>0;i--)
{
s.insert(i);
//s.erase(i);//删除
s.insert(i);
}
/*set<int >::iterator it;//前向迭代器
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
//这部分说明了集合的两个功能:1.除重;2.将集合中的元素按照从小到大的顺序自动排好
*/
set<int >::reverse_iterator it;//后向迭代器
for(it=s.rbegin();it!=s.rend();it++)
cout<<*it<<" ";
cout<<endl;
return 0;
}
4.map(映射)
//映射
#include<map>
using namespace std;
int main()
{
//map中第一元素是按字典序排列的
map<string,int>m;//名为映射的数组 下标为string 数据int
m["red"]=1;
m["green"]=2;
return 0;
}
5.栈
//栈,后进先出
#include<stack>
using namespace std;
int main()
{
stack<int> st;
for(int i=0;i<10;i++)
{
st.push(i);
}
cout<<"size??"<<endl;
cout<<st.size()<<endl;
cout<<"isempty??"<<endl;
cout<<st.empty()<<endl;
for(int i=0;i<10;i++)
{
cout<<st.top()<<endl;
st.pop();
}
cout<<"isempty??"<<endl;
cout<<st.empty()<<endl;
return 0;
}
6.队列和优先队列
C++ 清空队列(queue)的几种方法
C++中的queue自身是不支持clear操作的,但是双端队列deque是支持clear操作的。
方法一
直接用空的队列对象赋值
queue<int> q1;
// process
// ...
q1 = queue<int>();
方法二
遍历出队列
while (!Q.empty()) Q.pop();
方法三
使用swap,这种是最高效的,定义clear,保持STL容器的标准。
void clear(queue<int>& q) {
queue<int> empty;
swap(empty, q);
}
//队列,先进先出
#include<queue>
#include<iostream>
//#include<stack>
using namespace std;
int main()
{
//priority_queue<int> st; //优先队列默认情况下,从大到小排序,,
//优先队列和栈一样,都是.top(),堆是.front()
queue<int> st;
for(int i=0;i<10;i++)
{
st.push(i);
}
cout<<"size??"<<endl;
cout<<st.size()<<endl;
cout<<"isempty??"<<endl;
cout<<st.empty()<<endl;
for(int i=0;i<10;i++)
{
cout<<st.front()<<endl;
//cout<<st.top()<<endl;
st.pop();
}
cout<<"isempty??"<<endl;
cout<<st.empty()<<endl;
return 0;
}