输入
行数据未知个数处理
getline 输入一行数据
#include<string>
string ss;
getline(cin, ss);
这样,getline遇到回车或者EOF才结束操作。
输入是一行按空格分割的字符串 sstream 按空格分割字符串
int main() {
string str="i am a boy";
istringstream is(str);
string s;
while(is>>s) {
cout<<s<<endl;
}
}
输入是一行按分割符分割的字符串:1,1,2,2,3,3
ss.peek()是查看下一个字符,ss.ignore是移除第一个字符,当下一个字符是,时,移除
getline(cin, s);
int x;
stringstream ss(s);
while(ss>>x) {
cout<<x<<endl;
if (ss.peek() == ',') ss.ignore();
}
第一行数字,第二行字符串
如果使用getline()获取一行字符串 需要用getchar()吸收掉换行符
int m,n;
string s;
cin>>m>>n;
getline(cin,s);
cout<<m<<n<<s<<endl;
String
Vector
vector是动态扩充的数组
构造
- vector():创建一个空vector
- vector(int nSize):创建一个vector,元素个数为nSize
- vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
- vector(const vector&):复制构造函数
- vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
增加
- void push_back(const T& x):向量尾部增加一个元素X
- iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
- iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
- iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
删除
- iterator erase(iterator it):删除向量中迭代器指向元素
- iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
- void pop_back():删除向量中最后一个元素
- void clear():清空向量中所有元素
大小
vec.size();
清空
vec.clear();
排序
定义比较代码
bool Comp(const int &a,const int &b)
{
return a>b;
}
调用sort 排序
#include<algorithm>
sort(vec.begin(),vec.end(),Comp)
map
定义
map<type1 name,type2 name> maps;//第一个是键的类型,第二个是值的类型
添加数据
map容器内元素的访问
通过下标进行访问
通过迭代器进行访问
map可以使用it->first来访问键,使用it->second访问值
#include<iostream>
#include<map>
using namespace std;
int main(){
//定义
map<char, int> maps;
// insert 函数插入pair数据
maps.insert(pair < char,int > ('b',20));
// insert 函数插入value_type数据
maps.insert(map < char, int > ::value_type ('a', 10));
// 数组方式插入数据
maps['d'] = 10;
maps['e'] = 20;
//遍历
for (map<char, int>::iterator it = maps.begin(); it != maps.end(); it++) {
cout<<it->first<<" "<<it->second<<endl;
return
}
输出
遍历数据
- 前向迭代器
map<char, int> ::iterator it;
for(it = maps.begin(); it != maps.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
- 反向迭代器
map<char, int>::reverse_iterator iter;
for(iter = maps.rbegin(); iter!=maps.rend();iter++){
cout<<iter->first<<" "<<iter->second<<endl;
}
查找
maps.find() 查找一个元素
find(key): 返回键是key的映射的迭代器
如果等于迭代器的末尾,则表明未找到
findit=maps.find('b');
if(findit == maps.end()){
cout<<"not find"<<endl;
}else{
cout<<"find"<<endl;
}
清空
maps.clear()清空
删除
maps.erase()删除一个元素
it = maps.find("123");
maps.erase(it);
//关键字删除
int n = maps.erase("123"); //如果刪除了返回1,否则返回0
//用迭代器范围刪除 : 把整个map清空
maps.erase(maps.begin(), maps.end());
//等同于maps.clear()
长度
maps.szie()长度
int len=maps.size();获取到map中映射的次数
判断空
maps.empty()判断其是否为空
交换
maps.swap()交换两个map 不是交换map里的两个元素
map < int, int > m1, m2, m3;
map < int, int >::iterator m1_Iter;
m1.insert ( pair < int, int > ( 1, 10 ) );
m1.insert ( pair < int, int > ( 2, 20 ) );
m1.insert ( pair < int, int > ( 3, 30 ) );
m2.insert ( pair < int, int > ( 10, 100 ) );
m2.insert ( pair < int, int > ( 20, 200 ) );
m3.insert ( pair < int, int > ( 30, 300 ) );
cout << "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter->second;
cout << "." << endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
cout << "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
cout << "After swapping with m2, map m2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "After swapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
m1.swap(m2) :将m1与m2交换
排序
map 中的元素是自动按key进行升序,不能使用sort排序
常用用法
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的函数