1,二维动态数组
意义:可以在数组中存储一系列的以为数组
表现形式:vector<vector<int>>arr;
初始化的方式:
1>>逐个的初始化:
vector<vector<int>>arr;
arr.push_back({1,2,3});
arr.push_back({4,5,6});
arr.push_back({7,8,9});
2>>嵌套循环初始化:
vector<vector<int>>arr(a,vector<int>(b));
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
arr[i][j]=i+j;
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
3>> 初始化列表初始化
vector<vector<int>>arr={
{1,2,3},
{4,5,6},
{7,8,9}
};
2,双指针
意义:定义两个指针 (即是索引下标)一个从前面,一个从后面,两者同时向中间移动,并交换元素,时间复杂度o(n);(erase函数的时间复杂度是o(n),如果再加一层for循环,就是o(n^2,erase只是覆盖并不是移除)
模板:
bool is(const string&s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){
if(s[i]!=s[j]){
return false;
}
}
return true;
}
3,宏
什么是宏:是一种预处理指令。
类型:常量宏,函数宏,代码段
宏是如何定义的:#define+宏的名称+宏的替换文本。
(宏的名称可以是任何合法的标识符,宏的替换文本可以是任何有效的表达式,语句)
常量宏:#define PI 3.1415
#define LL long long
函数宏:#define arr(x) ((x)*(x))
int result = arr(5);
//在代码中可以像函数一样使用宏
4,向量容器
特点:向量容器允许在其内部存储一系列的元素
如何定义:vector<int>arr[100010];(千万不要写成“()”)
vector<int>arr[100010];
for(int i=1;i<n;i++){
long long a,b;
cin>>a>>b;
arr[b].push_back(a);//添加元素
}
5,逻辑运算
包括:与,或,非,异或
与:&&,全部为真才为真;
或:|| ,一个为真就为真
非:“!”表示
异或:相同为假,不同为真
A B A^B
0 0 0
0 1 1
1 0 1
1 1 0
异或和:(用一道题了解一下)
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N] , s[N];
int main(){
cin>>n;
for(int i = 1;i <= n;i ++)
cin>>a[i];
for(int i = 1;i <= n;i ++) //求异或前缀和数组
s[i] = s[i - 1] ^ a[i];
long long sum = 0;
for(int i = 1;i <= n;i ++)
for(int j = i;j <= n;j ++)
sum += s[j] ^ s[i - 1];//j控制集合的右边界
//i-1控制左边界
cout<<sum<<endl;
return 0;
}