c++ ACM 基本输入输出、字符串与STL用法

本文详细介绍了C++中如何处理未知行数的输入,使用getline函数、stringstream解析字符串,以及如何操作StringVector和Map(包括构造、增加、删除、大小、排序和查找)的常用方法。
摘要由CSDN通过智能技术生成

输入

行数据未知个数处理

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
   }

输出
在这里插入图片描述

遍历数据

  1. 前向迭代器
    map<char, int> ::iterator it;
    for(it = maps.begin(); it != maps.end();it++){
        cout<<it->first<<" "<<it->second<<endl;
    }
  1. 反向迭代器
 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的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值