C++的vector set map string 相关函数总结

如果要看详解请看下面连接:

【C++】蓝桥杯必备 算法竞赛常用STL万字总结_Cpt1024的博客-CSDN博客_算法竞赛pdf

【C/C++】STL详解_沉晓的博客-CSDN博客_c++的stl

【用法学习】C++ pair用法及使用sort函数对pair数据进行排序_荷叶田田_的博客-CSDN博客_sort对pair排序

vector (和string差不多,可以互用)

1.排序

设一维容器nums

  • sort(nums.begin(), nums.end());

2.添加数据

设二维容器nums,添加元素,相当于添加一维容器,一维数组可以不写别名,直接给元素,或者用vector<int>(a.begin(),a.end())来赋值,a为一维容器

可以不取别名,也可以取,看具体用法

return vector<int>(result_set.begin(), result_set.end());

result.push_back(vector<int>{nums[i],nums[left],nums[right]});

3.删除元素

a.pop_back()

3.反转====reverse

和string表达一样

4.insert


string

1.reverse反转

                 reverse(s.begin()+i, s.end());//左闭右开

end()是最后一个元素的后一个位置,所以左闭右开,

源代码:双指针

    void reverse(string& s, int start, int end){ //翻转,区间写法:左闭又闭 []
        for (int i = start, j = end; i < j; i++, j--) {
            swap(s[i], s[j]);
        }
    }

2.加空间resize()

        s.resize(ordlen + 2 * count);//申请空间

3.前两个和vector相关,后面和队列相关

   pop_back()删除

   push_back()添加元素

   a,back()返回第一个元素

  a.front()返回最后一个元素

b = a.substr(i, j) 从i下标截取j个字符赋值给b

a.insert(i, '.') 在i的哪个下标位置插入点,原来的那个数后移

a.erase(i)删除i的那个位置

set

设nums2为一维容器

1.查找数据

如果到了末尾说明没有找到这个数据

nums_set.find(nums2[i]) != nums_set.end()

2.添加数据

result_set.insert(nums2[i]);


map(和set中的函数差不多)

   auto val = result.find(target - nums[i]);//查找数据
            if ( val != result.end()) {
                return {val->second, i};
            }
            result.insert(pair<int, int>(nums[i], i));一般和pair使用,和之前的vector差不多


 相互作用

一般三个(set,map,数组)都可以互相覆盖

   vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;
        unordered_set<int> nums_set(nums1.begin(), nums1.end());

nums_set直接加vector中的数据,其他都能这样使用

字符串和数组差别

这里也给大家拓展一下字符串和数组有什么差别,

字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。

在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。

例如这段代码:

char a[5] = "asd";
for (int i = 0; a[i] != '\0'; i++) {
}

在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用'\0'来判断是否结束。

例如这段代码:

string a = "asd";
for (int i = 0; i < a.size(); i++) {
}

那么vector< char > 和 string 又有什么区别呢?

其实在基本操作上没有区别,但是 string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。

所以想处理字符串,我们还是会定义一个string类型。

后续持续更新......

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值