当前位置:   article > 正文

C++ bitset,vector,string,cstring,pair用法总结(建议收藏)+Python语法_c++微服务

c++微服务

以下内容是大一、大二竞赛的总结,主要是对STL的总结,一方面供个人备查,另一方面也作为分享。

目录

一、bitset总结

二、vector总结

三、string总结

四、cstring总结

五、pair总结 


一、bitset总结

头文件:#include <bitset>

 1.1 初始化

  1. bitset<8> bitset1;
  2. cout << bitset1 << endl; //输出:00000000
  3. bitset<8> bitset2(177);
  4. cout << bitset2 << endl; //输出:10110001
  5. bitset<8> bitset3(string("11001010"));
  6. cout << bitset3 << endl; //输出:11001010

1.2 改变位:reset()变为0,set()变为1

  1. bitset<8> bitset1(string("11111111"));
  2. bitset1.reset(2);
  3. cout << bitset1 << endl; //输出:11111011
  4. bitset<8> bitset2("00000000");
  5. bitset2.set(5);
  6. cout << bitset2 << endl; //输出:11011111

 1.3 取反:flip( )

  1. bitset<8> bitset1(string("11111111"));
  2. bitset1.flip();
  3. cout << bitset1 << endl; //输出:00000000

 1.4 计数:count( )

  1. bitset<8> bitset1(string("1111111"));
  2. int n = bitset1.count();
  3. cout << n << endl; //输出:7

 1.5 判断:all( )是否所有位都为1,none是否所有位都为0

  1. bitset<8> bitset1(string("11111111"));
  2. bitset<8> bitset2(string("00000000"));
  3. int x1 = bitset1.none();
  4. int x2 = bitset2.none();
  5. int y1 = bitset1.all();
  6. int y2 = bitset2.all();
  7. cout << x1 << ' '<< x2 << endl; //输出:0 1
  8. cout << y1 << ' '<< y2 << endl; //输出:1 0

 1.6 测试:test( n ) 测试第n位是1还是0

  1. bitset<8> bitset1(string("01111011"));
  2. int x = bitset1.test(0); //输出:1
  3. int y = bitset1.test(2); //输出:0
  4. cout << x << ' ' << y << endl; //输出:1 0

二、vector总结

头文件:#include <vector>

定义:vector<类型> 命名

插入元素: vec.push_back(x);         //在vector末尾插入新元素x

删除元素: vec.pop_back();        //删除掉最后一个元素

清除所有元素:vec.clear();          //清除所有元素

遍历输出元素:for (int i = 0; i < vec.size(); i++)    cout << vec[i] << ' ';

去重常用步骤:

  1. vector<int> a;
  2. //去重之前必须要先排序
  3. sort(a.begin(),a.end());
  4. //unique()函数将【相邻且重复】的元素放到vector的尾部,然后返回指向末尾部分第一个重复元素的迭代器
  5. auto it = unique(a.begin(), a.end());
  6. //erase()函数的两个参数分别代表,待删除部分指向开头和结尾的迭代器
  7. erase(it,a.end());

vec.front():访问第一个元素值
vec.back():访问最后一个元素值
vec.size():获取数组的长度
vec.begin():访问第一个元素地址
vec.end():访问最后一个元素地址

二维动态数组:

下面代码的意思是创建一个名字为st的动态二维数组,一共有20行,10列,每个元素被初始化为false。

vector<vector<bool>> st(20, vector<bool>(10, false));


/*        翻转与排序:
    #include <algorithm>
    reverse(vec.begin(),vec.end()); 逆序排序
    
    sort(vec.begin(),vec.end()); 从小到大排序

    bool comp(const int& a, const int& b){     return a > b;    }
    sort(vec.begin(), vec.end(),comp); 从大到小排序
*/

三、string总结

判断字符串中是否含有某个元素:

  1. string str="guanzhuwoshoucang" ; //字符串
  2. string a="zhuwo" ; //查找字符串
  3. if(str.find(a) != string::npos)
  4. cout << "str字符串中含有a字符串" << endl;

判断某个元素在字符串中的位置(从右往左):

  1. string str = "yudabcilovbciuman";
  2. string s = "bci";
  3. cout << str.rfind(s) << endl; //str.rfind()从字符串的右边开始查找,返回的是从右边开始第一次出现的下标

四、cstring总结

将字符串转化为浮点数:stof(字符串)

  1. string str;
  2. cin >> str;
  3. printf("%.6lf",stof(str));

五、pair总结 

5.1 pair对象的头文件:

#include <utility>

5.2 pair对象的创建与赋值:

  1. pair<string,double> pair1;
  2. pair<string,string> pair2("XMU","I Love xmu!");
  3. pair<string,string> pair3(pair2);
  4. pair<string,string> pair4(make_pair("xmu","I love programming"));
  5. pair<string,string> pair5(string("XMU"),string("We love programming"));

5.3 pair对象的输出:

用 pair对象名.first 和 pair对象名.second 进行输出

cout << "pair1:" << pair1.first << " " << pair1.second << endl;

1. 从控制台读取数字:int number = Convert.ToInt32(Console.ReadLine());

2. 生成随机数:Random random = new Random();  random.Next(0, 8)

3. 拼接字符串:StringBuilder builder = new StringBuilder(); builder.Append(s[random.Next(0, len - 1)]);

一、下面是Python:

1.1 将多个变量赋值为整型:

row,col = map(int,input().split(" "))

1.2 创建二维数组:

下划线表示的是一个占位符,通常用于只关心循环次数的情况

  1. res = [[0]*100 for _ in range(100)]
  2. res = [[0]*6 for _ in range(5)] #表示56列的二维数组

1.3 ord()可以将字符转化为数值,chr()可以将数值转化为字符

1.4 交换两个元素的值

  1. #假定2个元素分别为l和r,要交换二者的值
  2. l,r = r,l

1.5 将整数格式化为二进制字符串

binary = format(1,'06b'); #将1转化为6位的二进制字符串,输出000001

二、Python基础语法:

1、单行注释:# ,多行注释:''' ''' 

2、python采用代码缩进和冒号来区别代码之间的层次

3、每个变量在使用前必须赋值,才会创建内存空间。python是基于值的内存管理,相同值指向同一空间。具有内存自动管理功能。不需要声明类型,解释器会根据赋值语句自动推断

4、进制:8进制数0o开头,16进制数0x或0X开头

5、字符串:可以用单引号(' ')、双引号(" ")和三引号(''' '''或""" """)进行界定。其中三引号内的字符串可以分布在多行上。

6、输入函数:input("提示信息")。如果想以空格作为输入的分隔符,可以这样写:a,b = input().split(' ')。

7、输出函数:print()。想不换行可print("",end='')。就是令end参数等于空。

下面是文件读写的例子:

  1. fp=open('D:\motto.txt','a+')
  2. print("自强不息,止于至善!",file=fp)
  3. fp.close()

下面是格式化输出例子:

  1. print('%o'%30) # 八进制,输出36
  2. print('%d'%30) # 十进制,输出30
  3. print('%x'%30) # 十六进制,输出1e
  4. print('%o %d %x'%(24,29,28))
  5. print('%f'%3.1873211) #浮点数输出保留小数点后6位
  6. print('%s'%'我爱xmu') #字符串输出
  7. name="小猫"
  8. age=13
  9. print(f'姓名:{name},年龄:{age}')
  10. #输出:姓名:小猫,年龄:13

8、**是幂运算,//是取整除运算。

9、运算符优先级如下图: 

三、程序控制结构:

1、赋值、选择语句简单案例:

  1. a,b = 1,2
  2. if a>b:
  3. print(1)
  4. elif a==b:
  5. print(2)
  6. else:
  7. print(3)

2、while循环简单案例:

  1. sum=0
  2. n=0
  3. while(n<100):
  4. sum += n
  5. n += 1
  6. print(sum)

3、for循环简单语法及案例:

for  迭代变量 in 对象

        语句块

  1. sum=0
  2. for n in range(1,100):
  3. sum += n
  4. print (sum)

4、range()函数:range(stop) 是从0到stop-1的整数值,range(start,stop)是从start到stop-1的值,range(start,stop,step)是从start到stop-step(注意:不包含stop)的值。

5、break同c语言类似。讲一下:continue:遇到continue是跳出本次循环,会跳过挡圈循环的剩余语句,继续进行下一轮循环。

6、pass。相当于就是一个空语句,起到占位符的作用。

四、序列:

1、列表:

3.1.1 列表的创建:

由方括号和逗号组成。将一组数据用方括号括起,用逗号分隔。里面可以含有各种不同的类型。

  1. a = ['woai',123,"avd",'a']
  2. for m in a:
  3. print(m)
  4. a = [0]*10 #创建含有10个全0元素的数组

len(列表)可以测量长度。

list()函数可以将range()对象、字符串、元组或其它可迭代的数据转换为列表。

  1. num_list = list(range(1,6))
  2. print(num_list)

创建多个相同元素的列表:

dp[0]*100 #相当于创建100个元素为0的列表
3.1.2 列表的删除:

del 列表名

动态增加列表元素有以下5种方法:

        1. 列表名.append(元素)。2. 列表名.insert(插入位置,插入数据)。3. 列表名.extend(迭代对象) 可以将迭代对象追加到列表尾部。4. "+"运算符。5. "*"运算符,相当于乘上一个倍数,就是重复几次。

动态删除单个元素有以下3种方法:

        1. del 列表名[待删元素下标]。2. 列表名.pop() 是默认删除列表最后一个元素。 3. 列表名.remove(待删元素)

获取指定元素出现次数:列表名.count(待统计元素)

获取指定元素首次出现的下标:列表名.index(元素)

统计数值列表元素和:用sum()函数进行统计。如:res = sum(数值列表名,累加起始位置)

3.1.3 列表的排序:

对列表进行排序2种方法:1.  列表名.sort() 默认按降序排序,如果在括号内加上reverse=True则按降序排序。 2.  使用内置sorted()函数进行排序。新列表名 = sorted(旧列表名)。会生成一个全新的列表,不会改变原本列表的顺序

3.1.4 列表的成员资格判断:

1. in 2. not in 3. count() 4. index()

  1. name = ["saya","mata","mila","wage"]
  2. res = "saya" not in name
  3. print(res)

讲讲index:列表名.index(元素名)

3.1.5 列表的切片:

切片操作:

        切片操作会生成一个新的列表,但不会改变原列表。采用:列表名[开始位:结束位:步长],当开始位为空时表示从0开始,当步长为-1时表示从末尾开始截取,这个时候需要注意开始位应该要大于结束位。

  1. name = [3,4,22,32,9]
  2. name1 = name[4:1:-1]
  3. print(name1)

        可以结合del命令与切片操作来批量删除数据,下面的示例相当于删除0~3位上的数据:

  1. num = [13,54,38,93,28,74,59,92,85,66]
  2. del num[:4]
  3. print(num) # 输出[28,74,59,92,85,66]
3.1.6 列表的推导式: 

可以在列表内部加上公式

  1. list1=[3,5,7,11]
  2. list2=[20,15,33,24]
  3. num = [(x,y) for x in list1 for y in list2]
  4. print(num)
  5. # 输出:[(3, 20), (3, 15), (3, 33), (3, 24), (5, 20), (5, 15), (5, 33), (5, 24), (7, 20), (7, 15), (7, 33), (7, 24), (11, 20), (11, 15), (11, 33), (11, 24)]
3.1.7 二维列表:
  1. a = []
  2. for i in range(3):
  3. a.append([])
  4. for j in range(4):
  5. a[i].append(j)
  6. print(a)
  7. # [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
3.1.8 常见问题:

在初始化 A 列表时,只创建了一个 a 列表,然后将其多次添加到 A 中。这样做会导致 A 中的所有子列表都指向同一个 a 列表,因此在后续的操作中修改 A 中的任意一个子列表时,其他子列表也会受到影响。

使用temp = A进行赋值操作实际上是将tempA指向同一个对象,而不是创建一个新的对象。这意味着当你修改temp时,A也会随之修改,因为它们引用的是同一个列表。

通过使用temp = [row[:] for row in A],我们可以创建A的一个副本temp,其中每一行都是A对应行的副本。

temp = [row[:] for row in A]

2、元组:

3.2.1、创建元组:

元组使用的是圆括号()。元组中的元素不允许修改,但可以进行重新赋值。删除元组:del 元组名。元素常用内置函数:len(元组名)求长度。max(元组名)返回元组中元素最大值,min返回最小值。tuple(seq)将序列转为元组。

3.2.2、元组和列表的差别和转换:

  

3、字典:

3.3.1、字典的概念:

用于存放具有映射关系的数据,一组数据是关键数据被称为“键”(key),另一组数据可通过键来访问,被称为“值”(value)。字典是用{ }括起来的。

  1. grade = {"语文":97,"英语":100,"数学":89}
  2. print(grade["语文"]) # 访问方法1:输出97
  3. print(grade.get("语文")) # 访问方法2:使用get()方法,输出97
  4. print(grade.items()) # 获得键值对列表
  5. print(grade.keys()) # 获得键列表
  6. print(grade.values()) # 获得值列表
  7. for item in grade.items(): # 逐个输出键值对元素
  8. print(item)
  9. for key in grade.keys(): # 逐个输出键元素
  10. print(key)
  11. for value in grade.values(): # 逐个输出值元素
  12. print(value)

3.3.2 删除字典:

del 字典名

  1. grade = {"语文":97,"英语":100,"数学":89}
  2. grade["计算机"]=91 # 添加元素
  3. grade["语文"]=60 # 修改已有元素值
  4. grade.update({"政治":68,"历史":72}) # 如果被更新的字典中不包含对应的键值对,则该键值对被添加进去
  5. print (grade)

3.3.3 增加字典元素:

  1. count = {} #创建字典
  2. count['a'] = 1 #元素a对应的值为1

4、集合:

3.4.1集合的概念:

是无序不重复的元素序列,元素不可改变,使用大括号{ }创建,如果存在重复元素则只保留一个。添加的元素不能是列表、元组等可迭代对象。可以用pop(),remove()删除单个元素,用clear()方法删除所有元素。

五、字符串:

用一对单引号或双引号包裹字面量构成字符串。

4.1 isinstance()函数

字符串切片如下:

  1. str = "WoAiNi"
  2. str1 = str[2:5] #截取字符串2~4生成新字符串
  3. print(str1)
4.2 读入矩阵

例如读入一个12x12的矩阵,数字间用空格隔开,代码如下: 

  1. for i in range(12):
  2. str = input().split(' ')
  3. a = []
  4. for i in str:
  5. a.append(float(i))
  6. total.append(a)
4.3 对字符串排序

先转化为列表然后利用列表排序

  1. alpha = input()
  2. res = list(alpha)
  3. res.sort()
  4. print(res)
4.4 一些技巧 

[0 for i in range(5)]表示输出以5个重复0为元素的列表

str(i) for i in ans 是从列表中取出元素转化为字符。

''.join()表示的是以空字符作为连接符,将括号里的字符进行连接

  1. ans = [0 for i in range(5)]
  2. print(ans) #输出:[0, 0, 0, 0, 0]
  3. print(''.join(str(i) for i in ans)) #输出:00000

六、函数:

1、函数的定义:

def 函数名(参数列表):

        函数体

2、匿名函数的定义: 

匿名函数名 = lambda 参数列表:表达式

3、参数传递:

传递给不可变对象:是生成了一个新的对象,函数并不会影响对象本身。

传递给可变对象:函数可以修改对象本身。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/844465
推荐阅读
相关标签
  

闽ICP备14008679号