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

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

目录

一、bitset总结

二、vector总结

三、string总结

四、cstring总结

五、pair总结 


一、bitset总结

头文件:#include <bitset>

 1.1 初始化

bitset<8> bitset1;
cout << bitset1 << endl; //输出:00000000

bitset<8> bitset2(177);
cout << bitset2 << endl; //输出:10110001

bitset<8> bitset3(string("11001010"));
cout << bitset3 << endl; //输出:11001010

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

bitset<8> bitset1(string("11111111"));
bitset1.reset(2);
cout << bitset1 << endl; //输出:11111011


bitset<8> bitset2("00000000");
bitset2.set(5);
cout << bitset2 << endl; //输出:11011111

 1.3 取反:flip( )

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

 1.4 计数:count( )

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

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

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

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

bitset<8> bitset1(string("01111011"));
int x = bitset1.test(0); //输出:1
int y = bitset1.test(2); //输出:0
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] << ' ';

去重常用步骤:

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

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

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

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

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

四、cstring总结

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

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

五、pair总结 

5.1 pair对象的头文件:

#include <utility>

5.2 pair对象的创建与赋值:

pair<string,double> pair1;
pair<string,string> pair2("XMU","I Love xmu!");
pair<string,string> pair3(pair2);
pair<string,string> pair4(make_pair("xmu","I love programming"));
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 创建二维数组:

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

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

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

1.4 交换两个元素的值

#假定2个元素分别为l和r,要交换二者的值
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参数等于空。

下面是文件读写的例子:

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

下面是格式化输出例子:

print('%o'%30) # 八进制,输出36
print('%d'%30) # 十进制,输出30
print('%x'%30) # 十六进制,输出1e
print('%o %d %x'%(24,29,28)) 
print('%f'%3.1873211) #浮点数输出保留小数点后6位
print('%s'%'我爱xmu') #字符串输出

name="小猫"
age=13
print(f'姓名:{name},年龄:{age}')
#输出:姓名:小猫,年龄:13

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

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

三、程序控制结构:

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

a,b = 1,2
if a>b:
    print(1)
elif a==b:
    print(2)
else:
    print(3)

2、while循环简单案例:

sum=0
n=0
while(n<100):
    sum += n
    n += 1
print(sum)

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

for  迭代变量 in 对象

        语句块

sum=0
for n in range(1,100):
    sum += n
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 列表的创建:

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

a = ['woai',123,"avd",'a']
for m in a:
    print(m)

a = [0]*10 #创建含有10个全0元素的数组

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

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

num_list = list(range(1,6))
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()

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

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

3.1.5 列表的切片:

切片操作:

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

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

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

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

可以在列表内部加上公式

list1=[3,5,7,11]
list2=[20,15,33,24]
num = [(x,y) for x in list1 for y in list2]
print(num)
# 输出:[(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 二维列表:
a = []
for i in range(3):
    a.append([])
    for j in range(4):
        a[i].append(j)
print(a)
# [[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)。字典是用{ }括起来的。

grade = {"语文":97,"英语":100,"数学":89}
print(grade["语文"]) # 访问方法1:输出97
print(grade.get("语文")) # 访问方法2:使用get()方法,输出97

print(grade.items()) # 获得键值对列表
print(grade.keys()) # 获得键列表 
print(grade.values()) # 获得值列表

for item in grade.items(): # 逐个输出键值对元素
    print(item) 
for key in grade.keys(): # 逐个输出键元素
    print(key)
for value in grade.values(): # 逐个输出值元素
    print(value)

3.3.2 删除字典:

del 字典名

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

3.3.3 增加字典元素:

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

4、集合:

3.4.1集合的概念:

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

五、字符串:

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

4.1 isinstance()函数

字符串切片如下:

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

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

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

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

alpha = input()
res = list(alpha)
res.sort()
print(res)
4.4 一些技巧 

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

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

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

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

六、函数:

1、函数的定义:

def 函数名(参数列表):

        函数体

2、匿名函数的定义: 

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

3、参数传递:

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

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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值