C/C++ 刷题小知识点

来源:互联网 发布:java写hello world 编辑:程序博客网 时间:2024/06/06 17:20

C/C++

(1)字符串操作

1)stringstream

  类别:输入输出操作

  用途:①二次输出(类似缓存) ②数据转换

#include<iostream>#include<string>#include<sstream>using namespace std;int main(void){    string s, input;    while(getline(cin, s)){ //getline 将一行内容给s,s的长度自动适配        cout << "S : " << s << endl;        stringstream str(s);        while(str>>input)            cout << input << endl;    }    return 0;}②#include <string>#include <sstream>#include <iostream> int main(){    std::stringstream stream;    std::string result;    int i = 1000;    stream << i; //将int输入流    stream >> result; //从stream中抽取前面插入的int值    std::cout << result << std::endl; // print the string "1000"}

运行结果:

这里写图片描述



(2)sort函数

1)sort

  类别:排序

  用途:①从小到大排序(默认) ②从大到小排序③less<数据类型>()//从小到大排序,greater<数据类型>()//从大到小排序

#include<cstdio>#include<algorithm>using namespace std;int a[10]={9,6,3,8,5,2,7,4,1,0};bool complare(int a,int b){  return a>b;}void Sort1(){    printf("从小到大 : ");    sort(a, a + 10);    for(int i = 0; i < 10; i++)        printf("%d ", a[i]);}void Sort2(){    printf("从大到小 : ");    sort(a, a + 10, complare);    for(int i = 0; i < 10; i++)        printf("%d ", a[i]);}int main(void){    printf("初始 : ");    for(int i = 0;i < 10; i++)        printf("%d ", a[i]);    printf("\n");    Sort1();    printf("\n");    Sort2();    return 0;}
//数据类型是string,对string进行排序#include<iostream>#include<algorithm>using namespace std;int main(void){    string str[] = {        "adsfzcv", "a", "dsf", "werew"    };    for(int i = 0; i < 4; i++)    cout << str[i] << endl;    sort(str, str + 4, greater<string>());    for(int i = 0; i < 4; i++)    cout << str[i] << endl;    return 0;}



(3)lower_bound()

1)lower_bound

  用途:查找“大于或者等于x的第一个位置”,配合sort()

#include<cstdio>#include<algorithm>using namespace std;int str[] = {12, 32, 43, 54, 3, 5, 2, 1};int main(void) {    sort(str, str + 8);    int x = lower_bound(str, str + 8, 3) - str;    printf("%d %d", x, str[x]);    return 0;}



(4)map集合

1)map

  类别:容器

  用途:键值对(两属性相关)

下面提供2种简单常用的操作。

//若map<string, int> month_name来表示"月份名字到月份编号"的映射,然后用month_name["July"]=7这样的方式来赋值#include<iostream>#include<map>using namespace std;int main(void){    map<string, int> Map;    map<string,int>::iterator it;   //迭代去    Map.insert(pair<string, int>("AA", 1));  //增加元素    Map.insert(pair<string, int>("BB", 1));    for (it = Map.begin(); it != Map.end(); it++){   //循环        cout << it -> first << " " << it -> second << endl;    }}②#include<iostream>#include<map>using namespace std;int main(void){    map<long long,int> Map;    for(int i = 0 ; i < 5; ++i)        Map[i] = 1;   //添加5个元素    for(int i = 2; i < 10; ++i){        if(Map.count(i)){       //是否存在这个元素            Map[i]++;           //第二个键++            cout << "存在 " << Map[i] <<endl;        }else {            cout << i << "不存在"<<endl;        }    }    return 0;}③键值对<string, int> 增加int#include<iostream>#include<map>using namespace std;int main(void){    int N;    while(cin >> N && N != 0){        int cnt = 0;        map<string, int> Map;        map<string, int>::iterator it;        string str;        for(int i = 0 ; i < N; ++i){            cin >> str;            for(it = Map.begin(); it != Map.end(); ++it){                if(str == it -> first)                    (it -> second)++;            }            if(it == Map.end())                Map.insert(pair<string, int>(str, 1));        }        for(it = Map.begin(); it != Map.end(); ++it){            if(it -> second > cnt){                cnt = it -> second;                str = it -> first;            }        }        cout << str << endl;    }    return 0;}



(5)优先队列

1)priority_queue

  类别:容器

  用途:优先队列(从小到大 或 从大到小)

  详细说明:STL里面默认用的是 vector. 比较方式默认用 operator< , 所以如果你把后面俩个参数缺省的话,即priority_queue pq;

  如果要用到小顶堆,则一般要把模板的三个参数都带进去。

  STL里面定义了一个仿函数 greater<>,对于基本类型可以用这个仿函数声明小顶堆

优先队列就是大顶堆,队头元素最大。

下面简单常用的操作。

//push() :入队//pop() :出队//top() : 取队首元素(但不删除)#include<iostream>#include<queue>#include<vector>using namespace std;int main(void){    //greater 是从小到大,默认是从大到小    priority_queue<int , vector<int>, greater<int>> pq;    for(int i = 21; i < 31; ++i)        pq.push(i);    while(!pq.empty()){        printf("%d ", pq.top());        pq.pop();    }    return 0;}



(6)vector集合

1)vector

  类别:容器

  用途:字符串中插入删除某个字符等

下面简单常用的操作。

#include<cstdio>#include<vector>using namespace std;vector<char>  vec;void print(){    vector<char>::iterator it;    for (it = vec.begin(); it != vec.end(); ++it)        printf("%c ", *it);    printf("\n");}int main(void){    vec.clear();    vec.push_back('a');    vec.push_back('b');    vec.push_back('c');    vec.push_back('d');    vec.push_back('e');    vec.insert(vec.begin() + 2, 'f');    vec.size();    print();    vec.erase(vec.begin() + 2);    vec.size();    print();    return 0;}
1 0
原创粉丝点击