考试、考研、考博 复试上机 C/C++刷题技巧与常识

刷题技巧与常识C++

1.输入输出

     (1)按行读取

              方法一:读取一行内容。getline(cin,str)

              方法二:循环读取一行内容,直到EOF失败。while(getline(cin,str))

     (2)矩阵存储

              方法一:vector< vector<int> > M(n,vector<int>(m,0)) 

                           传参方法:fun(vector< vector<int> > M);

     (3)重新读取一整行内容

             方法一:cin.get()  然后使用getline(cin,str)继续读取内容

                          

2.字符串操作

      (1) String类

              初始化:String str;

                      末尾追加一个字符:str.push_back(char n);

              查找一个字符:

                     int find(char c, int pos = 0) 从pos开始查找字符c, 返回下标。

              查找子串:

                     int find(char *s, int pos = 0) 从pos开始查找字符串在当前串的位置,找不到返回-1.

              串比较: 

                     string == "obj"。

              返回C指针:

                    char * temp =  obj.c_str();

              删除字串、字符、指定长度字符串:

                    iterator erase (iterator p); string& erase(size_t pos=0, size_t len = npos); iterator erase (iterator first, iterator last);

              字符串字典序排序:

                  在 C 语言中,我们可以使用 strcmp() 函数比较 char* 类型字符串的字典序。

                           当字符串 s1 的字典序小于字符串 s2 的字典序时,返回值 < 0。

                           当字符串 s2 的字典序大于字符串 s1 的字典序时,返回值 > 0。

                           当字符串 s1 的字典序等于字符串 s2 的字典序时,返回值 = 0。

                  在 C++ 语言中,我们可以使用 compare() 函数比较 string 类型字符串的字典序。

 string s1 = "a";
 string s2 = "b";
 cout << s1.compare(s2) << endl; //-1
 cout << s2.compare(s1) << endl; //1
 cout << s1.compare(s1) << endl; //0

3.基本数据结构操作

      (1)queue队列

                初始化:queue q;

               入队:   q.push(element)

               出队:q.pop(element)

               返回队头元素:element = q.front()

               返回队尾元素:element = q.back()

               判断空:empty() 空返回true

               返回队列中个数:size()

       (2) stack栈

               初始化:

               入栈:stack.push(element) 入栈一个元素

               出栈:stack.pop() 弹出一个元素

               返回栈顶元素:element  =  top()

               判断空:empty() 空返回true

               返回栈中个数:size()

       (3) list

                   reverse(a.begin(), b.end()); 逆置

                   a.merge(n,greater<int>()); 合并

                   a.unique(); //删除所有和前一个元素相等的元素

                   a.remove(element)

         (4) bitset 类;位图类

                 bitset<n> bitmap(a);  通过数字来初始化比特位,默认各个位是0;

                 string str(“0001010101010101”)

                 bitset<n> bitmap(str);将这个字符串初始化为一个比特图;

                 bitset<n> bitmap(str, 5 ,4) ;从5号位开始,将4位长度内容初始化位一个比特图;

                 bitmap.count() 为1的个数; bitmap.flip() 取反;>> 输出;bitmap.set() 设置为0; reset() 设置为1. 

                 any() 是否存在为1的位?  

                      

         (5) 迭代器遍历 

                   数学遍历:for(auto it = vec.begin(); it != s.end(); it++)

                   逆向遍历:for(auto it = vec.rbegin(); it != s.rend(); it++)

                   求两个迭代器之间的距离 distance(first, last); 

        (6) set类 (集合的交,并,差)

                  a.insert(temp) ; //插入操作

                  set_intersection(x.begin(),x.end(),y.begin(),y.end(),inserter(a,a.end()));
                  set_union(x.begin(),x.end(),y.begin(),y.end(),inserter(b,b.end()));
                  set_difference(x.begin(),x.end(),y.begin(),y.end(),inserter(c,c.end()));

4.格式化输出

     (1)C语言格式化输出

                   printf("%m.nf",double); m为宽度,n为小数位数。

     (2)C++ 、C对其输出

                  左10字符对齐:printf("%-10d",num);

                 右10字符对齐:printf("%10d",num);

5.常用STL与C-lib算法(<algorithm>)

         排序:sort(obj.begin(), obj.end())

         大小写转换:toupper(), tolower()

         整形到字符串:string to_string(n)  ;   

         字符串到整形:int ci = stoi(char *c);  int ci = atoi(const char* c); const char * 来源于c_str()

         #反转容器元素:reverse()

         #交换两个元素位置: swap()

         #删除容器中的重复元素: unique()

         返回比大小:max,min,min_element,max_element

                               c = max(a,b) 返回最大的元素

                               c = *max_element(M[i].begin(),M[i].end());

6.常用IO设定

           关闭IO同步:std::ios::sync_with_stdio(false);

7.模板

     (1) 按位取数

     (2) 排序模板

     (3) 大数模板

8.数学库

       <math.h>

      log(n); 默认底数是10,真数是n, 可利用换底公式进一步计算,logaB = logcB / logcA

9.结构体排序模板

   bool comp(node &a, node &b){

           return a.x > b.x;   

   }

  >: 从大到小

  <:  从小到大

10.进制转换小技巧

     八进制:printf("%o",n);

    十六进制:printf("%x".n);

      sprintf 版本: char s[100] = {0};   sprintf(s, "%x", 15);  string num = s; num.length() = 1;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值