ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

牛客网--华为机试题(未完)

2019-03-20 21:38:50  阅读:1015  来源: 互联网

标签:set 试题 cin 牛客 华为 vector vec str getline


一、 cin、getline()、cin.getline()区别

C++输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取。

1. cin

结束条件:[enter],[space],[tab]

处理方法:cin遇到缓冲区中的[enter],[space],[tab]会结束当前输入,并舍弃[enter],[space],[tab],继续下一项输入,当有连续[space],[enter,[tab]会全部舍弃。

2. getline()

用于string类的。使用需包含头文件#include<string>。getline(cin,string s),接收一个字符串,可以接收空格、回车等

与cin.getline()的区别:1.cin.getline()接收输入字符串的是数组,getline()是string类型

                                    2.cin.getline()可以接收空格,但不能接收回车;getline()可以接收空格和回车

                                    3.cin.getline()会在数组结尾是'\0',getline()不会

3. cin.getline()

实际是cin.getline(接收字符串到m,接收个数n,结束字符)。接收一个字符串,可以接收空格等,最后一个字符为‘\0’。结束符可以通过设置第三个参数自己设置,默认是回车。m不能为string类型。

注意:实际接收到的要比n少一个,因为最后一个字符为'\0'。

二、 字符串类型String

#include <string>

using namespace std;

string str;

1. str.length()

返回字符串的长度. 这个数字应该和size()返回的数字相同。

2. str.size()

函数返回字符串中现在拥有的字符数。

3. str.append()

str.append(num, ch):末尾添加num个字符ch;

str.append(str1, index, len):末尾添加str1的字符串,下标从inddex开始,长度len;

4.  str.substr()

str.substr(index, num):返回本字符串的一个子串,从index开始,长num个字符。如果没有指定num,函数将简单的返回从index开始的剩余的字符串。

三、 vector set

1. vector

基础知识:

vector是表示可变大小数组的序列容器。

就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。

注意:

想对vector直接赋值就得定义大小,如果不定义大小,直接赋值会出错,只能用push_back

常用操作:

#include <vector>

vector< ElemetType> vec;

vector< ElemetType> tmp;  //非空

ElemetType b[N]={....};

访问:

  • vec.back():末尾元素
  • vec.front():第一个元素

容量:

  • vec.size();

修改:

  • vec.push_back():末尾添加
  • vec.pop_back():末尾删除
  • vec.assign(b,b+N)
  • vec=tmp

迭代器:

  • vec.begin():开始
  • vec.end():结束

算法:

遍历:
vector<int>::iterator it; for(it=vec.begin(); it!=vec.end(); it++) cout<<vec[it]<<endl; //或者 for (size_t i = 0; i < vec.size(); i++) { cout << vec.at(i) << endl; }
翻转:
#include <algorithm> reverse(vec.begin(), vec.end());
元素排序
#include <algorithm> sort(vec.begin(), vec.end()); //采用的是从小到大的排序 //如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法: bool Comp(const int& a, const int& b) { return a > b; } sort(vec.begin(), vec.end(), Comp);

2. set

set作为一个容器是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序,set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。

#include <set>

ElementType a[N]={...};

set<ElementType> iset(a, a+N);

迭代:

 for(set<ElementType>::iterator it=iset.begin();it!=iset.end();it++)
     cout<<*it<<endl;

四、 cout利用控制符dec、hex、oct分别输出十进制、十六进制、八进制

默认进制为十进制,在修改进制之前,原来格式一直有效。

cout<<hex<<a;

cout<<oct<<a;

相关知识点:

用输出流输出的都是字符串;

 

标签:set,试题,cin,牛客,华为,vector,vec,str,getline
来源: https://www.cnblogs.com/learning-zjx/p/10567905.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有