二维动态数组+双指针+宏+向量容器+逻辑运算(与或非异或)+异或和

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值