c语言 0 123 23456 3456789,牛客网刷题记录

1、原码、反码、补码的概念:   正数的原码、反码、补码是一样的,即看到符号位(第一位)是0,就可以照着写其他两种码;负数的反码符号位不变,数值位分别“按位取反”。负数的补码是原码的反码末位加1。整数的补码才是在计算机中的存储形式。

2、逻辑语句从左到右执行,如果前面的条件语句满足了整个条件,那么后面的语句就不执行了。

3、字符串的赋值问题:

042a163437c6266761374fe9823c36e4.png像如图中所采用的的赋值方法都是错误的,编译没有错误,但运行就会奔溃,原因是进入了错误的地址。

原因是如下,有的字符串是不能被修改的。

42c69d64923b3e98c5958a928f986d1e.png

4、vector的用法

#include

vectorv1(10);                                                  // V1有10个元素,每个元素的值都是0.

vectorv2{10};                                                  // V2有1个元素,该元素的值是10.

vectorv3(10,1);                                               // V3有10个元素,每个元素的值是1。

46d12fd00f4f1d2560254675dfea1281.png

vectorv4{10,1} == vectorv4 = {10,1};    // v4有两个元素,分别是10和1

vectorv5 = v1 == vectorv5(v1);             // v5中包含所有v1所有元素的副本

vectorv6;                                                        // v6是一个空的vector。

关于vector的若干重要操作:

v.empty()                                 如果V不含有任何元素,返回真;否则返回假

v.size()                                    返回V中元素的个数

v.push_back(t)                        向V的尾端添加t

v.pop_back()                          删除末尾元素

v.insert()                                 任意位置插入元素

vec.insert(vec.begin()+i,num);//插入完成后新数字的位置就是vec.begin()+i

v.erase()                                 任意位置删除元素

v.clear()                                  清空

v.begin()                                 开始指针

v.end()                                    末尾指针:得到数组的最后一个单元+1的指针

v[n]                                         返回V中第N个位置上元素的索引,同数组用法

从键盘获得数字初始化的时候只能是,int n;cin>>n;v.push_back(n);

获取vector元素的方法:也可以直接dian string s = vec[0];

string str;

vectorvec;

str = "zhaonan";

vec.push_back(str);

vector::iterator iter = vec.begin();

string a = *iter;

vector用作引用:

4ed9a66736f6ad04610b5916955c8844.png

反转:1、#include reverse(a.begin(),a.end())

2、std::reverse(a.begin(),a.end())

5.1、stack,继承自vector的栈

c++ stl栈stack的头文件为: #include

c++ stl栈stack的成员函数介绍

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

5.2、队列

可能需要#include

queueq;     // 示例用法。

push() 在末尾加入一个元素

pop() 弹出队列当中第一个值

front()返回队列中第一个元素

back()返回对垒最后一个元素

empty()队列为空时返回真

size()大小

//----------------------------------------- 读取堆栈的栈顶元素

#include #include using namespace std;

int main()

{

// 创建堆栈对象

stacks;

// 元素入栈

s.push(3);

s.push(19);

s.push(23);

s.push(36);

s.push(50);

s.push(4);

// 元素依次出栈

while(!s.empty())

{

// 打印栈顶元素,打印出:4 50 36 23 19 3

cout << s.top() << endl;

// 出栈

s.pop();

}

return 0;

}

6 、输入几个数的停止操作,Enter键结束输入。

while(cin >> n){

if (getchar() == '\n')

{

break;

}

}

7、字符串:有两种分别为C-风格字符串和基于string类的字符串

C-风格字符串特殊性质:以空字符结尾,空字符被写作\0,其ASCII码为0。其初始化有三种方式:

char cat[8] = {'f','a','t','e','s','a','\0'}; // 在我眼中'a'就是97,这种方法显式'\0'

char bird[11] = "zhaonan"; // '\0'隐式存在

char fish[] = "Bubbles"; // 编译器自动计算大小

字符串的输入问题:cin使用空白(空格,制表符和换行符)来确定字符串的结束位置。面向行的输入有类(如cin)成员函数:getline()和get(),这两函数都读取一行,直到碰到换行符,前者将丢弃换行符,后者将换行符保留在输入队列中。

getchar();获取输入行中下一个字符

strlen(char *)可获得char *字符串长度,但是sizeof(char *) == 4;

8、常用的algorithm算法

sort(开始指针;结束指针;标志位(默认为从小到大));

sort(numbers.begin(),numbers.end(),hhhhhh); // 其中hhhhhh为bool类型,sort函数就是让首地址和末

地址之间的元素都满足标志位的比较函数

reverse(开始指针;结束指针);   // 反转

9、字符串与数字的转换与字符串相加

记得#include

键盘键入数字后转换成string的两种方式:

string s1,s2;

// 方式一,直接cin

cin >> s1 >> s2;

// 方式二,其中x1,x2为整型

//s1 = to_string(x1);

//s2 = to_string(x2);

string类型转换为int类型:int n = atoi(s.c_str());

c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.

这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。

注意:一定要使用strcpy()函数 等来操作函数c_str()返回的指针。

两个string字符串相加:直接s1+s2;

两个string字符串比较大小:int n = s1.compare(s2); 也可以直接s1 > s2;

string的长度:s1.length(); == s1.size();

string的排序:sort(s1.begin(), s1.end());

string的substr两个用法:

string str.substr(nStart)         // 默认 从str字符串nStart位置开始截取到str结束为止

string str.substr(nStart, nLength)// 从str字符串nStart位置开始截取nLength个字符!如果nLength>

剩余的字符则截取到str结束为止

string str("123456asdf");

string strTmp1= str.substr(1); // 获得字符串str中 从第1位开始到结束的字符串,strTmp1值

为:"23456asdf"

string strTmp2 = str.substr(1,5); // 获得字符串s中 从第1位开始的长度为5的字符串,strTmp1值

为:"23456"

初始化:

string str;

str[0] = 'a';

str[1] = 's';

cout << str[0];

这样的方式是不对的

读取一行:getline(cin,str);

字符串反转:

a34c69414d1896a78cc1343738de28ed.png

10 set的用法

#include set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。

begin()        ,返回set容器的第一个元素

end()      ,返回set容器的最后一个元素

0c7a64f9bdbfe4c384be94311c86831e.png

clear()          ,删除set容器中的所有的元素

empty()    ,判断set容器是否为空

max_size()   ,返回set容器可能包含的元素最大个数

size()      ,返回当前set容器中的元素个数

count()             用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,                           这样就变成了判断某一键值是否在set出现过了

insert()

如何取出set容器中的元素见下面代码:

for(set::iterator iter = ss.begin(); iter != ss.end(); iter++)

vec.push_back(*iter);

11、map

#include

size()   返回元素个数

int FirstNotRepeatingChar(string str) {

int nlength = str.size();

maptemp;

int i;

for(i = 0; i < nlength; i++)

temp[str[i]]++;

for(i = 0; i < nlength; i++)

{

if(temp[str[i]] == 1)

break;

}

if(i == nlength)

return -1;

else

return i;

}

可以看出,键是下标,值是对应的内容,值为int时,默认为0;使用[]可以改变通过键改变值,但使用insert函数时不可以有重复的键,否则插不进去。输出

//map内部本身就是按照key的大小顺序进行存储的

for(map::iterator it = temp.begin(); it != temp.end(); it++)

cout << (*it).first << " " << (*it).second << endl;

for(map::iterator it=m.begin();it!=m.end();++it){

cout << it->first << " "<< it->second << endl;

不按键值排序的map:unordered_map,其他一样。 #include

12、关于输出

9addf316af86119c48a2e3f108eb0d1d.png可以看出标准输入默认保留了6位数字,但有时候会有小数点后4位等要求。

需要#include

double value = 12.3456789;

cout << value << endl; // 默认以6精度,所以输出为 12.3457

cout << setprecision(4) << value << endl; // 改成4精度,所以输出为12.35

cout << setprecision(8) << value << endl; // 改成8精度,所以输出为12.345679

cout << fixed << setprecision(4) << value << endl; // 加了fixed意味着是固定点方式显示,所

以这里的精度指的是小数位,输出为

12.3457

cout << value << endl; // fixed和setprecision的作用还在,依然显示12.3457

cout.unsetf( ios::fixed ); // 去掉了fixed,所以精度恢复成整个数值的有效位数,显示为12.35

cout << value << endl;

cout.precision( 6 ); // 恢复成原来的样子,输出为12.3457

cout << value << endl;

13、i的j次方:pow(i,j);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值