binary_search&memset【学习记录】

1.binary_search

·binary_search用于在已排序的序列中进行二分查找

·binary_search函数返回一个布尔值,表示是否找到了指定的值。如果找到了,返回true;否则,返回false

//其次序列  必须是已经排序好的,否则结果可能是不确定的。

//可用sort函数排序

vector<int> a(n);
sort(a.begin(), a.end());
//a(n):使用大小为 n 的构造函数创建向量 a。
//这意味着向量 a 可以容纳 n 个整数元素,
//并且这些元素的初始值为默认值,即0。//**
#include <iostream>
#include <algorithm> // 引用头文件以使用binary_search函数
#include <vector>
using namespace std;

int main() {
    vector<int> b = {1, 2, 3, 4, 5};
    int x = 3;
    bool found = binary_search(b.begin(), b.end(), x);
    if (found) {
        cout << "Found" << endl;
    } else {
        cout << "Not found" << endl;
    }
    return 0;
}

2.memset

        memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。

例一:对char类型的数组a初始化,设置元素全为’1’

int main(){
    char a[4];
    memset(a,'1',4);
    for(int i=0; i<4; i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

例二:对int类型的数组a初始化,设置元素值全为1

int main(){
    int a[4];
    memset(a,1,sizeof(a));
    for(int i=0; i<4; i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

1、首先要说明的第一点

对于第二个程序,数组a是整型的,一般int所占内存空间为4个字节,所以在使用memset赋值时,下面的语句是错误的:

int a[4];
memset(a,1,4);

由于memset函数是以字节为单位进行赋值的,所以上述代码是为数组a的前4个字节进行赋值

正确的memset语句应为:

memset(a,1,16); //int所占内存为4字节的情况
memset(a,1,sizeof(a));
2.关于所要赋值的字符数的写法

先来看一个示例:

#include<bits/stdc++.h>
using namespace std;

void fun1(int a[]){
    memset(a,-1,sizeof(a)); 
}

int main(){
    int a[6];
    fun1(a);
    for(int i=0; i<6; i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

当数组作为参数传递时,其传递的实际上是一个指针,这个指针指向数组的首地址,如果用sizeof(a)函数得到的只是指针的长度,而不是数组的长度。

解决方案:
在函数中加入数组长度参数,在传递前先获取数组长度,然后将数组长度作为参数传递进去。

#include<bits/stdc++.h>
using namespace std;

void fun1(int a[], int len){
    memset(a,-1,len); 
}

int main(){
    int a[6];
    int len = sizeof(a);
    fun1(a,len);
    for(int i=0; i<6; i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值