相关文章推荐
不要命的自行车  ·  使用近似与精确kNN实现向量检索-检索分析服 ...·  3 月前    · 
逃跑的小刀  ·  Java 利用POI对象 ...·  9 月前    · 
曾深爱过的黄瓜  ·  高雄市政府全球資訊網-最新消息·  9 月前    · 
欢快的花生  ·  中伦律师事务所官方网站·  10 月前    · 
腼腆的红茶  ·  关于天津工业大学新邮件系统启用及新功能和使用 ...·  1 年前    · 
风流倜傥的爆米花  ·  比较两个字典并检查有多少(键、值)对相等-腾 ...·  1 年前    · 
Code  ›  C++容器vector的数组片段截取操作_c++ vector 截取_stitching的博客
begin vector初始化 迭代器 vector
https://blog.csdn.net/qq_40250056/article/details/114681940
阳光的金鱼
2 年前
  • 一、vector的描述
    • 1.1 vector的基本使用
      • 1.1.1 vector 的头文件
      • 1.1.2 vector 的容器的几种创建方式
    • 1.2 vector 成员函数
      • 1.2.1 成员函数功能描述
      • 1.2.2 常用成员函数使用实例
    • 1.3 vector 的数组片段截取操作
      • 1.3.1 初始化截取
      • 1.3.2 assign()功能函数实现截取
      • 1.3.4 功能打包
    • 1.4 vector数组合并

    一、vector的描述

    vector 是C++的STL(标准模板库)最常用的容器之一,与array相似,都是C/C++中普通数组的升级版。与array(数组容量固定)不同的是,vector是动态分配内存的,即:数组的容量不是固定的,可以动态的对数组中的数据进行增删,同时动态的进行内存分配和释放。

    1.1 vector的基本使用

    1.1.1 vector 的头文件

    #include <vector> // 头文件
    using namespace std; // 所在称空间
    

    1.1.2 vector 的容器的几种创建方式

    vector 根据不同应用场景有如下几种创建方式

    vector<double> values; // 创建空double类型的空容器
    vector<int> Arrs {1,2,3,4,5,6,7,8,9}; // 创建整型的容器并初始化,注意这里初始化应该要用大括号({})而不是中括号([])
    vector<int>::const_iterator fist1 = Arrs.begin() + 2; // 第三个迭代器
    vector<int>::const_iterator last1 = Arrs.end() - 1; // 倒数第二个迭代器
    vector<int> Arrs2(first1, last1); // 创建整型的容器,并初始化为Arrs的第三个到第八个:{3,4,5,6,7,8}
    vector<float> Arrs3(5,6.0); // 创建浮点型容器,并初始化为5个元素的值均为6.0:{6.0,6.0,6.0,6.0,6.0}
    

    1.2 vector 成员函数

    vector 容器不但拥有普通数组的基本功能:根据索引返回值、插入、删除、迭代器等等。

    1.2.1 成员函数功能描述

    函数成员函数功能
    begin()返回指向容器中的第一个元素的迭代器
    end()返回指向容器中的最后一个元素的迭代器
    rbegin()同上
    rend()同上
    cbegin()和begin()功能相同,只不过在此基础上,增加了const属性,不能修改元素
    cend()和end()功能相同,只不过在此基础上,增加了const属性,不能修改元素
    crbegin()同上
    crend()同上
    size()返回实际元素个数
    resize()改变实际元素的个数
    capacity()返回当前容量
    empty()判断容器是否有元素:有返回false;没有返回true
    reverse()增加容器的容量
    shrink _to_fit()将内存减少到等于当前元素实际使用大小
    at()使用经过边界检查的索引访问元素。
    front()返回第一个元素
    back()返回最后一个元素
    data()返回指向容器第一个元素的指针
    push_back()在容器末尾添加元素
    assign()用新元素替换原有内容
    pop_back()删除容器尾部元素
    insert()在指定位置插入一个或多个元素
    erase()一处一个元素或者一段元素
    clear()移除所有的元素,容器大小变为0
    swap()交换两个容器的所有元素
    emplace()在指定位置生成一个元素

    1.2.2 常用成员函数使用实例

    常用的几个成员函数使用如下:

    1.3 vector 的数组片段截取操作

    数组片段截取就是将vector数组的某一段连续的区间单独提取出来存储在另外一个vector数组。比如有一个有5个元素的数组Arrs,我需要将中间的三个元素单独作为数组存在另一个数组Arrs2:

    vector<int> Arrs {1,2,3,4,5};
    vector<int> Arrs2;
    // 怎么才能将Arrs的中间三个元素,放到Arrs中去?
    

    有一个简单粗暴的方法:穷举,找到遍历Arrs,把中间三个元素一个一个的存入。这种方法在数据量少的情况比较简单,但是数据量较大时就比较麻烦。因此这了不做阐述,下面介绍另外两种方法。

    1.3.1 初始化截取

    vector<int> Arrs {1,2,3,4,5,6,7,8,9}; // 假设有这么个数组,要截取中间第二个元素到第四个元素:2,3,4
    vector<int>::const_iterator Fist = Arrs.begin() + 1; // 找到第二个迭代器
    vector<int>::const_iterator Second = Arrs.begin() + 2; // 找到第三个迭代器
    vector<int> Arrs2(First, Second); // 将值直接初始化到Arrs2
    

    迭代器是指可在容器对象上遍访的对象

    1.3.2 assign()功能函数实现截取

    assign() 功能函数是vector容器的成员函数。原型:
    1:void assign(const_iterator first,const_iterator last); //两个指针,分别指向开始和结束的地方
    2:void assign(size_type n,const T& x = T()); //n指要构造的vector成员的个数, x指成员的数值,他的类型必须与vector类型一致!

    vector<int> Arrs {1,2,3,4,5,6,7,8,9}; // 假设有这么个数组,要截取中间第二个元素到第四个元素:2,3,4
    vector<int>::const_iterator Fist = Arrs.begin() + 1; // 找到第二个迭代器
    vector<int>::const_iterator Second = Arrs.begin() + 2; // 找到第三个迭代器
    vector<int> Arr2;
    Arr2.assign(First,Second); //使用assign() 成员函数将Arrs对应位置的值存入Arrs2数组中
    

    1.3.4 功能打包

    下面代码是将vector数组片段截取操作的函数打包。第一个函数的思路是给定区间左右边界相对于数组首迭代元素的位置,第二个元素是重载函数,思路是直接给定区间左右边界的迭代元素。

    #include <iostream>
    #include <vector>
    using namespace std;
    //功能描述: 裁剪vector数组某一区间的元素到新的vector数组
    // 参数说明:
    // Arrs: 将要被裁剪的vector数组
    // begin:左边界相对于Arrs.begin()的位置
    // end: 右边界相对于Arrs.begin()的位置
    vector<int> CutArrs(vector<int>& Arrs, int begin, int end){ // begin <= end;
            //if(end > Arrs.size()) return;
            vector<int> result;
            result.assign(Arrs.begin() + begin, Arrs.begin() + end);
            return result;
    // 函数重载,
    // 参数说明:
    // begin: 某个vector数组的某一迭代元素作为区间左边界
    // end:   某个vector数组的某一迭代元素作为区间有边界,且在begin之后,或本身就是begin
    vector<int> CutArrs(vector<int>::const_iterator begin, vector<int>::const_iterator end){
    	vector<int> result(begin, end);
    	return result;
    

    1.4 vector数组合并

    数组合并是指将多个不同的vector数组合并到一个vector数组中,如下代码所示:

    vector<int> nums0 = {1,2,3};
    vector<int> nums1 = {4,5,6,7};
    vector<int> nums2 = {8,9};
    nums0.insert(nums0.end(),nums1.begin(),nums1.end());// 将nums1数组合并到nums0数组末尾
    nums2.insert(nums2.begin(),nums0.begin(),nums0.end());// 将nums0数组合并到nums2数组前面
                                        vector 切片, assign 截取区间 元素
    string &assign(const_iterator first,const_itertor last); 把first和last迭代器之间的赋给字符串,不包含 last的元素
    assign(First,Second);     ----->  [First,Second)  左闭右开区间
    #include <iostream>
    #include <vector>
    #include <algorithm.
                                        对于vector变量,有时需要像数组、string一样选择部分区间的值构成一个新的vector,那么我们可以这样做。
    首先对于一个已知的vector:
    vector<int> v;
    for(int i = 0; i < 10; i++) v.push_back(i);
    可以使用vector的构造方法来提取部分区间元素:
    vector<int> v1(v.begin(), v.begin() + 2);
    for(int i = 0; i < v1.size(); i++)
    #include &amp;lt;vector&amp;gt;
    int main() {
        std::vector&amp;lt;int&amp;gt; vector{1,2,3,4,5,6,7,8,9};
        //截取前4个数
        std::vector&amp;lt;int&amp;gt;::const_iterator f
                                        给定一串字符串,如何截取特定长度的字符串并存入容器中
    首先我们输入一串字符串,字符串之间用逗号隔开,假如我们想要将每个逗号隔开的字符串分别存起来,并输出排序后的各段字符串。
    例如:abc,defg,bhd,那么输出就是abc bhd defg。代码如下:
    #include <bits/stdc++.h>
    using namespace std;
    int main()
        ve...
                                        begin()       返回第一个元素的迭代器 (iterator)end()          返回最末元素的迭代器 (iterator) (译注:实指向最末元素的下一个位置)  注:这两个就相当于指针,可以把他们返回的值赋给一个声明的 iterator (迭代器),这个迭代器可以 ++  -- 的操作,还可以直接加一个数字 例1:std::vector a(10);
    
 
推荐文章
不要命的自行车  ·  使用近似与精确kNN实现向量检索-检索分析服务 Elasticsearch版-阿里云
3 月前
逃跑的小刀  ·  Java 利用POI对象 SXSSFWorkbook 导出Excel - chelsey3tsf - 博客园
9 月前
曾深爱过的黄瓜  ·  高雄市政府全球資訊網-最新消息
9 月前
欢快的花生  ·  中伦律师事务所官方网站
10 月前
腼腆的红茶  ·  关于天津工业大学新邮件系统启用及新功能和使用注意事项的通知
1 年前
风流倜傥的爆米花  ·  比较两个字典并检查有多少(键、值)对相等-腾讯云开发者社区-腾讯云
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号