水题收获

STL标准库查找函数

find函数

二分查找,binary_search函数

目的:查找某元素是否存在于数组,存在返回1,不存在返回0.

binary_search(arr[],arr[]+size,target)

  • arr[]:数组首地址

  • size:数组元素个数

  • target:查找的元素

lower_bound函数

目的:在前闭后开区间进行查找返回第一个大于或等于某元素的位置(是一个地址,如果所有元素都小于目标元素,会返回最后一个位置

lower_bound(arr[],arr[]+size,target)

  • arr[]:数组首地址

  • size:数组元素个数

  • target:查找的元素

upper_bound函数

目的:在前闭后开区间进行查找返回第一个大于某元素的位置(是一个地址,如果所有元素都小于目标元素,会返回最后一个位置,这个返回的位置是越界的

upper_bound(arr[],arr[]+size,target)

  • arr[]:数组首地址

  • size:数组元素个数

  • target:查找的元素

map和undered_map

undered_map其实就是一种Hash的存储方式,是一种无序关联式容器,里面的元素以类似这种方式存储:

{key:value},如:{"张三":1, "李四":2}

map初始化

  1. C++ 11的初始化方法
map<int,string> m = {
				{3,"hello"},
				{4,"world"},
			};

  1. 函数的初始化方法
map<int,int> create_map()
{
  map<int,int> m;
  m[1] = 2;
  m[3] = 4;
  m[5] = 6;
  return m;
}

map<int,int> m = create_map();

C++ 输入问题

程序的输入是有一个缓冲区的,每次键盘输入结束后会先把输入的数据存储在缓冲区。

cin函数是直接从缓冲区获取数据的,所以当缓冲区有残留数据时cin会直接读取残留数据而不是键盘请求。

cin.getline()

作用:读取一行字符串,第一次多输入的数据会存储在缓冲区,如换行符

可以在此句后面加上cin.get()将空格读取掉

用法:

    • string s;
    • getline(cin, s);
    • char sa[30];
    • cin.getline(sa, 20, ' ') // 第三个是结束符,默认为换行

cin

直接读取数据,在遇到空格,换行时会停止读入,结束符(空格,换行)会被丢弃而不是存入缓冲区

cin.get(参数1:数组名,参数2:长度,参数3:结束符)

在遇到换行时会结束输入,但却并不会丢弃缓冲区中的Enter。

读取字符有两种方法:

  1. char c = cin.get()

  2. cin.get(c)

char c1, c2;
cin.get(c1);
cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印两个字符

结果:

  • 输入 a和回车
  • 结果 先输出a在输出一个换行

读取字符串的方法:

会丢弃缓冲区中的Enter或空格但是不会丢弃自定义的结束符

char ch, a[20];
// 只会保存4个字符
cin.get(a, 5 , 'd');
cin>>ch;
cout<<a<<endl;
  • 输入12d45回车
  • 输出1234 d

因为cin.get(a,5,'d')遇到d停止输入,但是自定义标识符被缓存到缓存区,所以第二次直接读取缓存,输出d

cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

但是cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。

cin的错误处理

没心情整理了
https://my.oschina.net/zchking/blog/98069

posted @ 2020-11-09 20:40  晓尘  阅读(97)  评论(0)    收藏  举报