赞
踩
以下内容是大一、大二竞赛的总结,主要是对STL的总结,一方面供个人备查,另一方面也作为分享。
目录
头文件:#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
头文件:#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 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()从字符串的右边开始查找,返回的是从右边开始第一次出现的下标
将字符串转化为浮点数:stof(字符串)
- string str;
- cin >> str;
- printf("%.6lf",stof(str));
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)]);
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
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。相当于就是一个空语句,起到占位符的作用。
由方括号和逗号组成。将一组数据用方括号括起,用逗号分隔。里面可以含有各种不同的类型。
- 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的列表
del 列表名
动态增加列表元素有以下5种方法:
1. 列表名.append(元素)。2. 列表名.insert(插入位置,插入数据)。3. 列表名.extend(迭代对象) 可以将迭代对象追加到列表尾部。4. "+"运算符。5. "*"运算符,相当于乘上一个倍数,就是重复几次。
动态删除单个元素有以下3种方法:
1. del 列表名[待删元素下标]。2. 列表名.pop() 是默认删除列表最后一个元素。 3. 列表名.remove(待删元素)
获取指定元素出现次数:列表名.count(待统计元素)
获取指定元素首次出现的下标:列表名.index(元素)
统计数值列表元素和:用sum()函数进行统计。如:res = sum(数值列表名,累加起始位置)
对列表进行排序2种方法:1. 列表名.sort() 默认按降序排序,如果在括号内加上reverse=True则按降序排序。 2. 使用内置sorted()函数进行排序。新列表名 = sorted(旧列表名)。会生成一个全新的列表,不会改变原本列表的顺序
1. in 2. not in 3. count() 4. index()
- name = ["saya","mata","mila","wage"]
- res = "saya" not in name
- print(res)
讲讲index:列表名.index(元素名)
切片操作:
切片操作会生成一个新的列表,但不会改变原列表。采用:列表名[开始位:结束位:步长],当开始位为空时表示从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]
可以在列表内部加上公式
- 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)]
- 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]]
在初始化 A
列表时,只创建了一个 a
列表,然后将其多次添加到 A
中。这样做会导致 A
中的所有子列表都指向同一个 a
列表,因此在后续的操作中修改 A
中的任意一个子列表时,其他子列表也会受到影响。
使用temp = A
进行赋值操作实际上是将temp
和A
指向同一个对象,而不是创建一个新的对象。这意味着当你修改temp
时,A
也会随之修改,因为它们引用的是同一个列表。
通过使用temp = [row[:] for row in A]
,我们可以创建A
的一个副本temp
,其中每一行都是A
对应行的副本。
temp = [row[:] for row in A]
元组使用的是圆括号()。元组中的元素不允许修改,但可以进行重新赋值。删除元组:del 元组名。元素常用内置函数:len(元组名)求长度。max(元组名)返回元组中元素最大值,min返回最小值。tuple(seq)将序列转为元组。
用于存放具有映射关系的数据,一组数据是关键数据被称为“键”(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)
del 字典名
- grade = {"语文":97,"英语":100,"数学":89}
- grade["计算机"]=91 # 添加元素
- grade["语文"]=60 # 修改已有元素值
- grade.update({"政治":68,"历史":72}) # 如果被更新的字典中不包含对应的键值对,则该键值对被添加进去
- print (grade)
3.3.3 增加字典元素:
- count = {} #创建字典
- count['a'] = 1 #元素a对应的值为1
是无序不重复的元素序列,元素不可改变,使用大括号{ }创建,如果存在重复元素则只保留一个。添加的元素不能是列表、元组等可迭代对象。可以用pop(),remove()删除单个元素,用clear()方法删除所有元素。
用一对单引号或双引号包裹字面量构成字符串。
字符串切片如下:
- str = "WoAiNi"
- str1 = str[2:5] #截取字符串2~4生成新字符串
- print(str1)
例如读入一个12x12的矩阵,数字间用空格隔开,代码如下:
- for i in range(12):
- str = input().split(' ')
- a = []
- for i in str:
- a.append(float(i))
- total.append(a)
先转化为列表然后利用列表排序
- alpha = input()
- res = list(alpha)
- res.sort()
- print(res)
[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
def 函数名(参数列表):
函数体
匿名函数名 = lambda 参数列表:表达式
传递给不可变对象:是生成了一个新的对象,函数并不会影响对象本身。
传递给可变对象:函数可以修改对象本身。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。