C++ STL

本文介绍了C++编程中的基本结构,包括C++编译器头文件的使用,以及C++标准模板库(STL)中的字符串操作、vector数组和algorithm算法函数,如sort、min、max、binary_search等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.C++构架

#include<bits/stdc++.h>//C++万能库 包含大部分库函数
#include<iostream>
using namespace std;
int main()
{
    int a;
    cin>>a;// =scanf("%d",&a);
    cout<<a<<endl;//=printf("%d\n",a);
    return 0;
}

2.C++ STL <string>字符串

string s;
getline(cin,s);//getline(cin,string变量)
cout<<s<<endl;

char s2[100];
cin.getline(s2,100);//cin.getline(字符串数组名,长度)
string常见操作

str.length();str.size();
str.insert(1,"aaa");//在下标为1处插入一个字符或者字符串
str.issert(str.begin(),'a')//在迭代器处插入一个字符或者字符串
str.c_str();返回c语言字符串,用于printf
str.append(str2);//把str2拼接到str后面
str.compare(str2);//strcmp(str,str2)
str==str2//strcmp(str,str2)==0;
str+=str2;//str.append(str2);
str+='a';//str.push_back('a'); 也可以是字符串

3.C++ STL <vector>数组

初始化:

vector<int> arr1(100);
//既可以像数组一样用下标访问,也可以像链表一样动态改变长度。
int arr1[100];
    vector<int> arr(100);
    vector<int> list;
    //C语言方法遍历
    for(int i=0;i<100;i++)
    {
        scanf("%d",&arr[i]);
    }
    //C++ vector遍历
    for(int i=0;i<100;i++)
    {
        int a;
        cin>>a;
        list.push_back(a);
    }
vector常见操作

list.size();//数组元素个数  O(1)
list.clear();//清空数组  O(n)
list.empty();//数组是否为空  O(1)
list.begin();//数组的首元素迭代器  O(1)
list.end();//数组最后一个元素的下一个元素的迭代器(该元素实际不存在)  O(1)
list.erase(p1);//删除数组某个迭代器所在位置的数字  O(n)
list.push_back(1);//往数组后面添加元素  O(1)
list.pop_back();//删除最后一个元素  O(1)
迭代器与普通指针使用方法的对比

vector<int> arr1(100);
int arr2[100];

vector<int>::iterator p1;
int *p2;

for(p1=arr1.begin();p1!=arr1.end();p1++)
{
    cout<<*p1<<endl;
}

int i;
for(p2=arr2,i=0;i<100;i++,p2++)
{
    cout<<*p2<<endl;
}

4.C++ STL <algorithm>算法函数

    //sort(排序开始指针,排序结束指针——最后元素的下一个元素的指针)
    //时间复杂度O(nlogn)
    vector<int> arr {2,1,3,4,6};
    sort(arr.begin(),arr.end());
    
    int arr2[]={2,1,3,4,6};
    sort(arr2,arr2+5);
    //sort( , ,自定义比较函数)
    //内部排序函数是按小于干系比较的,排序结果是升序(默认)
    //内部排序函数是按大于干系比较的,排序结果是降序

    bool cmp(int a,int b)
    {
        return a>b;
    }

    int arr2[]={2,1,3,4,6};
    vector<int> arr {2,1,3,4,6};

    sort(arr2,arr2+5,cmp);
min(1,2);max(1,2);
//最大最小值  O(1)

nth_element(arr.begin(),arr.begin()+n,arr.end());
//把数组中第n小的元素放到第n个位置
//保证左边的数小于他 右边的数大于他 O(n)
//并不能保证左右元素顺序排序

swap(arr[0],arr[1])
//交换任意两个同类型变量 O(1)

reverse(arr.begin(),arr.end())
//反转数组 O(n)

int NewLenght=unique(arr.begin(),arr.end())-arr.begin();
//arr必须是已经排好序
//unique作用是去重 O(n)
//但不是真正的去重 只是把后面不重复的元素颠覆前面重复的元素

bool isExist=binary_search(arr.begin(),arr.end(),1);
//查找元素是否存在 O(longn)

int *firstLoc=lower_bound(arr.begin(),arr.end(),1)-arr.begin();
int *lastLoc=upper_bound(arr.begin(),arr.end(),1)-arr.begin();
//两个函数都是查找有序数组中出现该元素的位置
//low_bound是查找第一次出现位置 upper_bound是查找最后一次出现的位置
//返回的对应位置的指针 O(longn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值