C++ STL vector

该代码展示了C++中vector的基本用法,包括初始化、复制、赋值、大小调整、内存管理等操作,以及对二维vector的处理。文章强调了reserve和resize方法的区别,并提供了遍历和排序等常见操作的例子。
摘要由CSDN通过智能技术生成

直接放代码吧,

懒得整理了改天再整理

好饿啊

#include<bits/stdc++.h>
#include<iostream>
#include<vector>//vector需要的头文件
#include<algorithm>
using namespace std;
int main() {
    vector<int> v1;//定义一个空的一维数组
    vector<int> v2= {1,2,4,5,6};
    vector<int> v3(7,-1);
    vector<int> v4(7);
    vector<int> v5(v4);//复制v4
    vector<int> v6(v4.begin(),v4.begin()+3);
    int ch[20]= {0};
    vector v7(ch,ch+7);//从数组里获得初值

    
    
    //嵌套定义
    //二维数组的创建
    //可参考https://blog.csdn.net/weixin_44618297/article/details/120798312?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%B5%8C%E5%A5%97%E7%9A%84vector%E6%80%8E%E4%B9%88%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-120798312.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187
    //嵌套定义时  若预先知道大小 建议在创建时就定义好vector大小或直接使用数组  频繁扩容非常费时间
    vector<vector<int>> td1(3,vector<int>(4,1));
    vector<vector<int>> td2(4,vector<int>(5));//二维数组,3行4列并初始化为1
    
    vector<vector<int>> td3(5);//5行
    int line=3;//3行
    
    /*
      for(int i=0;i<td3.size();i++){
      td3[i].reserve(line);
      }
      for(int i=0;i<td3.size();i++){
      for(int j=0;j<td3[0].size();j++){
      td3[i][j]=1;
      }
      }
      for(int i=0;i<td3.size();i++){
      for(int j=0;j<td3[0].size();j++){
      printf("%d\n",td3[i][j]);
      }
      }  
      
     */
    //注意上面这段代码:这段代码中,使用了vector的reserve方法来为二维数组td3分配空间。但是,reserve方法只是增加了vector的容量,而不是改变了vector的大小。也就是说,reserve方法只是保证了vector可以容纳n个元素,但并没有实际创建这些元素。
    //可以使用resize方法来改变vector的大小,并为新创建的元素赋予默认值或指定值,resize会同时增加vector的容量并改变vector的大小。resize方法会根据参数的值来调整vector的大小,如果参数的值大于当前的大小,那么vector会在末尾添加新的元素,并用默认值或指定值初始化;如果参数的值小于当前的大小,那么vector会删除多余的元素。
    //示例如下:
    
    for(int i=0;i<td3.size();i++){
        td3[i].resize(line);
    }
    for(int i=0;i<td3.size();i++){
        for(int j=0;j<td3[0].size();j++){
            td3[i][j]=1;
        }
    }
    
    for(int i=0;i<td3.size();i++){
        for(int j=0;j<td3[0].size();j++){
            printf("%d\n",td3[i][j]);
        }
    }
    
    
    
    
    
    //
    vector<string> stl1= {"hi","my","name","is"};
    vector<string> stl2(4,"hi");
    //
    //vector相关操作
    vector<int>a,b;
    a.assign(b.begin(),b.begin()+7);//将b的0到6共七个元素赋值给a//注意第二个begin后面有括号
    a.assign(4,2);
    a.back();//返回a的最后一个元素
    a.front();//返回a的第一个元素
    a.clear();//清空数据(clear无法清除内存)
    //清空向量a的内存vector<int > ().swap(a);
    //参考https://blog.csdn.net/a272846945/article/details/51182144?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167879749216782427483039%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167879749216782427483039&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-51182144-null-null.142^v73^control,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=vector%20%20%20clear&spm=1018.2226.3001.4187
    a.pop_back();//删除a向量的最后一个元素
    a.push_back(5);//在a的最后插入5
    a.insert(a.begin()+1,5);//在a的下标为1的元素位置插入5
    a.insert(a.begin()+1,3,4);//在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
    a.erase(a.begin()+1,a.begin()+7);//删除
    a.size();
        //    int len1=td3.size();//建议提前进行强制类型转换为int,不然可能会有警告[警告] comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long long unsigned int'} [-Wsign-compare]
    a.capacity();//返回a在内存中总共可以容纳的元素个数
    a.resize(10);//将a的现有元素个数调整至10个,多则删,少则补,其值随机
    a.resize(10,2);//将a的现有元素个数调整至10个,多则删,少则补,其值为2
    a.reserve(100);//将a的容量扩充至100,
    a.swap(b);//b为向量,将a中的元素和b中的元素整体交换
    if(a==b);
    if(a.empty());//判空//返回true或false
    for(int i=1; i<=10; i++) {
        int t;
        cin>>t;
        a.push_back(t);
    }
    //常用
    sort(a.begin(),a.end());//快排
    reverse(a.begin(),a.end());//逆序    //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
    copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
    find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
    
    //vector的遍历
    /*
    
        //1
    for(int i;i<a.size();i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;
        //2
    for(auto i=a.begin();i!=a.end();i++){
        cout<<*i<<" ";
    }
    cout<<endl;
        //3
    for(auto i:a){
        cout<<i<<" ";
    }
    cout<<endl;    
    */
    
    
    //vector做形参
    /*
      在C++中vector容器作为形参的三种方式如下:
      function(vector a)
      function(vector& a)
      function(vector* a)
      假设vector< int > t, 此三种调用方式及对应的意义如下:
      
      function(t) 传入值 
      function(t) 传入引用
      function(t) 传入地址
      产生的效果:
      
      会产生复制构造,不会改变传入的t,但是浪费内存;
      不会产生复制构造,改变t,节省内存;
      不会产生复制构造,改变t,节省内存。
      ————————————————*/
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值