leetcode中C++内部提供的函数汇总

        在刷leetcode的时候,经常就发现别人的代码有很多自带的函数,而自己根本不知道,这就有点不爽了,下面是我目前刷题遇到的一些函数,持续更新。

----------------------------强行分割线---------------------------

 

数组

在数组的最开始插入一个元素,比如数字 1

digits.insert(digits.begin(),1);

合并两个vector

result.insert(result.end(),vector1.begin(),vector1.end())

数组还有一个函数是end()函数,比如 a.size() == 5 ,那么 a.end()指向的是a[5],即最后一个元素的后一个元素

// 表示最后一个元素的后一个元素
digits.end()

获得字符串/数组的长度

s.length();
s.size();

重设数组大小

s.resize(100);    // 此时里面所有元素为 0
cout<<s.size()<<endl;
for(int item:s)
    cout<<item;    // 输出全是0

vector尾部插入一个数据,在vector头文件里面

res.push_back(nums1[l1]);

排序从小到大

sort(nums1.begin(),nums1.end());

排序从大到小(自定义排序规则)

#include<algorithm>
#include<iostream>
#include<vector>

using namespace std;

// 自定义排序函数
bool cmp(int a,int b){
    return a>b;
}

int main(){
    vector<int> arr;
    for(int i=0; i<10; i++){
        arr.push_back(i);
    }
    // 自定义逆序
    sort(arr.begin(),arr.end(),cmp);
    // STL逆序
    // reverse(arr.begin(),arr.end());
    for(int num:arr)
        cout<<num<<endl;
    return 0;
}

翻转数组

// 注意下面这个函数是将整个数组翻转,不是排序
// 如果要从大到小排序,需要自定义排序规则
reverse(nums1.begin(),nums1.end());

查找元素

// 后面再添加

 

字符串

翻转字符串

// result is string
reverse(result.begin(),result.end())

截取字符串

str.substr(start_index,len)
set

 set结构   C++中set的用法

set的各成员函数列表如下:

1. begin()--返回指向第一个元素的迭代器

2. clear()--清除所有元素

3. count()--返回某个值元素的个数

4. empty()--如果集合为空,返回true

5. end()--返回指向最后一个元素的迭代器

6. equal_range()--返回集合中与给定值相等的上下限的两个迭代器

7. erase()--删除集合中的元素

8. find()--返回一个指向被查找到元素的迭代器

9. get_allocator()--返回集合的分配器

10. insert()--在集合中插入元素

11. lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

12. key_comp()--返回一个用于元素间值比较的函数

13. max_size()--返回集合能容纳的元素的最大限值

14. rbegin()--返回指向集合中最后一个元素的反向迭代器

15. rend()--返回指向集合中第一个元素的反向迭代器

16. size()--集合中元素的数目

17. swap()--交换两个集合变量

18. upper_bound()--返回大于某个值元素的迭代器

19. value_comp()--返回一个用于比较元素间的值的函数
// copy的
#include<set>
#include<iostream>
using namespace std;
int main()
{
    int i;
    int arr[5] = {0,1,2,3,4};
    set<int> iset(arr,arr+5);

    iset.insert(5);
    cout<<"size:"<<iset.size()<<endl;
    cout<<"3 count = "<<iset.count(3)<<endl;
    iset.erase(1);

    set<int>::iterator ite1 = iset.begin();
    set<int>::iterator ite2 = iset.end();
    for(;ite1!=ite2;ite1++)
    {
        cout<<*ite1;
    }
    cout<<endl;

    ite1 = iset.find(3);
    if(ite1!=iset.end())
        cout<<"3 found"<<endl;

    ite1 = iset.find(1);
    if(ite1!=iset.end())
        cout<<"1 not found"<<endl;
}

 

map

map用法 map的使用

map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的

声明一个map

map<int,int> map_arr1;

当前map中元素个数


    map<int,int> result;
    for(int i=0; i<10; i++){
        result[i] = i;
    }
    cout<<result.size()<<endl;

查找并返回查找结果

map<int,int>::iterator iter = map_arr1.find(1)
if(iter == map_arr1.end()){
//                 查找失败,新建
    map_arr1[1] = 1;
}else{
//                 查找成功                
}

单独获得 map 的键值(配合查找使用)

// 键
map->first;
// 值
map->second;

查找是否有这个东西出现

//由于map不包含重复的key,因此map.count(key)取值为0,或者1,表示是否包含
map_arr1.count(1);

插入

//用insert函數插入pair,没有验证是否正确
    mapStudent.insert(pair<string, string>("r000", "student_zero"));
 
//用"array"方式插入
    mapStudent["r123"] = "student_first";
    mapStudent["r456"] = "student_second";

删除map的某个元素


            map<int,int>::iterator iter = map1.begin();
            while(iter != map1.end()){
                map1.erase(iter);
            }

遍历map元素

        
        map<int,int>::iterator curr = map_arr.begin();
        while(curr != map_arr.end()){
            cout<<curr->first <<":"<<curr->second<<endl;
            curr ++;
        }
        // 也可以使用for循环遍历
        for(curr=map_arr.begin(); curr!=map_arr.end(); curr++){
            cout<<curr->first <<":"<<curr->second<<endl;
        }

使用map对vector计数

        map<int,int> count;
         // nums是一个vector
        for(int num:nums){
            // map有一个性质,就是如果没有出现过就会新建
            count[num] ++;
        }

 

栈 stack

初始化栈

stack<int> s;

入栈

s.push(1);

出栈

s.pop();

栈空

bool b = s.empty()    // 栈空返回true

 

得到栈顶元素但不弹出

int a = s.top();

得到栈顶元素并弹出

// 是的,没错,就是不能一下子既弹出又得到值
int a = s.top();
s.pop();

 

 

队列

声明一个队列

queue<TreeNode*> q;

队列长度

q.size()

进队

q.push(root);

出队,并不能获得出队元素

q.pop();

获得队头元素,但不会弹出这个元素

TreeNode *temp = q.front();

所以,获得队头元素并弹出

TreeNode *temp = q.front();
q.pop();

获得队尾元素,但不会弹出这个元素

q.back()

 

 

 

----------------------------强行分割线---------------------------

 

链表

 

 

 

 

 

 

----------------------------强行分割线---------------------------

 

----------------------------强行分割线---------------------------

 

 

 

 

 

----------------------------强行分割线---------------------------

----------------------------强行分割线---------------------------

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值