zoukankan      html  css  js  c++  java
  • C++ vector动态数组

    #include<vector>头文件

    vector类称作向量类

    百度百科的解释: https://baike.baidu.com/item/vector/3330482

    我喜欢把知识点拿出来实际操作。

    提纲挈领的总结实际工程中用到的方式方法,最后列表展示出来,补充一些常用实际案例,最直接。

    既方便看,又方便提取。

    之前不了解动态数组vector的事,感觉像一座大山,没有办法迈过去。可是当深入的了解并使用到它的时候,觉得他真的是太便捷了。

    比如说一般的数组a,一旦我们定义好了,就不能对里面的排序进行随意的增删改(或者说增删改的代价太大)

    1.因为数组a在创建的时候,系统自动给它分配了一段固定长度内存,无法重定义数组的大小。

    2.值写进去可以被抹掉,但那一段内存始终被占用着,无法实现「值没了,后1位变量前进一格」。

    3.数组a可以被声明为空,如a[],但是在末尾添加数值还是很局限。而动态数组vec可以实现任意类型的push_back

    ……

    我目前探索到的动态数组vecvec内变量个数可变,可随意插入,可随你删除,数组尾部添加动态变量很便利

    总之,很赞。

    很初级的操作:

    string类型

    vector<string> s1;

    vector<string> s2;

    s1.push_back(s2);

    结构体类型

    Struct ST st;

    vector<ST> st1;

    vector<ST> st2;

    st1.push_back(st2);

    迭代器访问,遍历

    (类似指针)

    vector<int>::iterator it;

    for(it=vec.begin();it!= vec.end();it++)

    cout<<*it<<endl;

    vector遍历

    for(int i=0; i<vec.size(); i++)

    常用的初始化及函数:

    初始化vector

    vector<int>v1;

    初始化为空

    vector<int>v2(v1);

    用另一个v1初始化v2

    vector<int>v3(n, 3);

    vector<string>v3(5, "hello");

    初始化为n3

    5"hello"

    vector<int>v4(10);

    初始化为10个空值

    int a[10]={1,2,3,4,5,6};

    vector<int>v5(a,a+6);

    vector<int>v5(&a[0],&a[6]);

    初始化为:已有数组a[0,6),即a[0,5]

    vec.push_back(a);

    vector尾部添加元素a

    vec.insert(pos,elem);

    pos处插入elem

    iterator insert(iterator it,const T& x):

    vec.insert(pos,n,elem);

    pos处插入nelem

    insert(iterator it,int n,const T& x):

    vec.insert(pos,beg,end);

    pos处插入[beg, end)区间的所有元素

    insert(iterator it,const_iterator first,const_iterator last):

    vec.pop_back();

    删除last最后一个元素

    vec.clear():

    清空所有元素

    vec.erase(v.begin(),v.begin()+3);

    删除[first,last)中元素

    erase(iterator first,iterator last):

    erase(iterator it):

    删除迭代器指向元素

    遍历

    vec.begin();地址

    first返回头指针,指向第一个元素

    vec.end();地址

    last+1,返回尾指针,指向一个不存在元素

    vec.front();

    返回首元素

    vec.back();

    返回尾元素

    vec.rbegin();地址

    last返回尾指针,指向第一个元素

    vec.rend();地址

    first-1,返回首指针之前,指向一个不存在元素

    vec.at(int pos);

    返回pos位置元素的引用

    大小

    vec.empty();

    判断是否为空,空true,否则返回false;

    vec.size();

    获取vector中元素个数

    vec.capacity();

    获取容器分配的存储空间

    vec.resize(n+m);

    调整vec的大小变为n+m

    其他

    加头文件#include<algorithm>

    ——

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

    对元素排序

    reverse(vec.begin(), vec.end());

    反转容器

    swap(vec[i],vec[j]);

    交换元素

    参考示例,见蒲公英110老师的文章。

    https://www.cnblogs.com/zsq1993/p/5929806.html

  • 相关阅读:
    全排列(next_permutation)
    Codeforces Round #321 (Div. 2)C(tree dfs)
    cf_ducational Codeforces Round 16_D(gcd)
    cf455a(简单dp)
    cf584a(水题)
    cf112a(水题)
    冒泡排序
    Python内置类型性能分析
    常见时间复杂度
    MongoDB 备份
  • 原文地址:https://www.cnblogs.com/yeyeye123/p/10612032.html
Copyright © 2011-2022 走看看