容器共同操作操作
insert(pos,e): 将元素e的拷贝安插于迭代器pos所指的位置
erase(beg,end): 移除[beg,end]区间内的所有元素
clear(): 移除所有元素
**
**
vector
c.size() 返回元素个数
c.empty() 判断容器是否为空
c.max_size() 返回元素最大可能数量(固定值)
c.capacity() 返回重新分配空间前可容纳的最大元素数量
c.reserve(n) 扩大容量为n
**#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v1(10),v2;
int i;
v1.push_back(123);
v2=v1;
cout<<v2.capacity()<<endl;
for(i=0;i<v1.size();i++)
cout<<v1.at(i)<<" ";
cout<<endl;
return 0;
}
**
迭代器相关函数
begin() 返回一个迭代器,指向第一个元素
end() 返回一个迭代器,指向最后一个元素之后
rbegin() 返回一个逆向迭代器,指向逆向遍历的第一个元素
rend() 返回一个逆向迭代器,指向逆向遍历的最后一个元素之后
**
**
vector 和 数组的区别
1.array 定义的时候必须定义数组的元素个数;而vector 不需要;
2.array 定义后的空间是固定的了,不能改变;而vector 要灵活得多,可再加或减.
3.vector有一系列的函数操作,非常方便使用。
4.数组和vector不同,一个数组不能用另一个数组初始化,也不能将一个数组赋值给另一个数组;
**
**
list
从键盘输入10个整数,用这些整数值作为结点数据,生成一个链表,按顺序输出链表中结点的数值。然后从键盘输入一个待查找整数,在链表中查找该整数,若找到则删除该整数所在的结点(如果出现多次,全部删除),然后输出删除结点以后的链表。在程序结束之前清空链表。
#include <iostream>
#include <list>
using namespace std ;
int main(){
list<int> Link;
int i, key, item;
for(i=0;i < 10;i++) {
cin>>item;
Link.push_front(item);
}
cout<<"List: "; // 输出链表
list<int>::iterator p=Link.begin();
while(p!=Link.end()) {
p<Link.end()
cout <<*p << " ";
p++; //使P指向下一个节点
}
cout << endl;
cout << "请输入一个需要删除的整数: ";
cin >> key;
Link.remove(key);
cout << "List: ";
p=Link.begin();
while(p!=Link.end()){
cout <<*p << " ";
p++;
}
cout << endl;
}
set / multiset:集合
基本原理
将插入的值(第一个操作数)与树根(第二个操作数)(红黑树,二叉排序树)进行比较,如果返回值是true,则在左子树中进行插入
否则在右子树中进行插入
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
s.insert(3);
s.insert(2);
s.insert(1);
s.insert(1);
cout<<"set 的 size 值为 :"<<s.size()<<endl;
cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl;
cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
s.clear();
if(s.empty()) { cout<<"set 为空 !!!"<<endl; }
cout<<"set 的 size 值为 :"<<s.size()<<endl;
cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
return 0;
}
#include <iostream>
#include <set>
using namespace std;
int main(){
set<int> s;
set<int>::iterator ite;
s.insert(3);
s.insert(2);
s.insert(1);
s.insert(1);
for(ite=s.begin();ite!=s.end();ite++)
cout<<*ite<<" ";
cout<<endl;
ite=s.begin();
while(p!=s.end()) {
cout<<*ite<<" "; p++;
}
return 0;
}
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
class Integer{
int data;
public:
Integer(int a=0) {
data=a;
}
bool operator <(const Integer b) const {
return data>b.data;
}
friend ostream & operator<<(ostream &out, Integer a) {
out<<a.data;
return out;
}
};
int main(){
set<Integer> s;
set<Integer>::iterator ite;
Integer a(1),b(3);
s.insert(a);
s.insert(b);
for(ite=s.begin();ite!=s.end();ite++) {
cout<<*ite<<" ";
}
return 0;
}
#include<iostream>
#include<set>
using namespace std;
struct mycomp{ //自定义比较函数,重载“()”操作符
bool operator() (const int &a, const int &b) {
return a > b;
}
};
int main(){
set<int, mycomp> s; //采用比较函数mycomp
s.insert(5);
s.insert(1);
s.insert(6);
s.insert(3);
s.insert(5);
set<int,mycomp>::iterator it;
for(it = s.begin(); it != s.end(); it++)
cout << *it << " ";
cout << endl;
return 0;
}
Map
气球问题
#include <iostream>
#include <map>
#include <iterator>
#include <string>
using namespace std;
int main(){
int n, iMax=0;
while(cin>>n && n>0){
map<string, int > Balloon;
string s;
for(int i=0;i<n;i++){ cin>>s; Balloon[s]++;}
map<string ,int >::iterator point,loc;
for(point=Balloon.begin();point!=Balloon.end();point++)
if(iMax<point->second){
iMax=point->second;loc=point;}
cout<<loc->first <<endl;
}
return 0;
}
#include <iostream>
#include <queue>
using namespace std;
int main(){
priority_queue<int> q;
q.push(1); q.push(10); q.push(3); q.push(4);
while(!q.empty ()){
int s;
s=q.top ();
cout<<s<<" ";
q.pop();
}
return 0;
}
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
class Student{
char name[10];
char num[10];
int score;
public:
Student( ){}
Student( char *name, char *num, int score) {
strcpy(this->name,name);
strcpy(this->num,num);
this->score=score;
}
friend bool operator <(Student s1,Student s2)
{ return s1.score<s2.score; }
void display() {cout<<name<<"\t"<<num<<"\t"<<score<<endl; }
};
int main()
{
priority_queue<Student> q;
Student s1("A","1",90),s2("B","2",99),s3("C","3",70);
q.push(s1);
q.push (s2);
q.push(s3);
while(!q.empty())
{
Student x;
x=q.top();
q.pop();
x.display();
}
cout<<endl;
return 0;
}