• STL 小白学习(3) vector


      1 #include <iostream>
      2 using namespace std;
      3 #include <vector>
      4 
      5 void printVector(vector<int>& v) {
      6     for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
      7         cout << (*it) << " ";
      8     }
      9     cout << endl;
     10 }
     11 //初始化
     12 void test01() {
     13 
     14     vector<int> v1;//默认构造 初始化
     15     //用数组进行初始化
     16     int arr[] = { 10,30,45,65 };
     17     vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
     18     //用迭代器进行初始化
     19     vector<int>v3(v2.begin(), v2.end());
     20     //,,,
     21     vector<int>v4(v3);
     22 
     23     //遍历
     24     printVector(v2);
     25     printVector(v3);
     26     printVector(v4);
     27 
     28 }
     29 
     30 //常用赋值操作
     31 void test02() {
     32     vector<int> v = { 45,4,54,56,10 }; 
     33     printVector(v);
     34     vector<int> v2;
     35     v2.assign(v.begin(), v.end()); //.assign()成员函数赋值
     36     printVector(v2);
     37     vector<int> v3;
     38     v3 = v2;//等号重载 赋值
     39     printVector(v3);
     40     vector<int> _v = { 123,123,323,44,20 };
     41     _v.swap(v);//将_v与v数据交换
     42     printVector(_v);
     43     printVector(v);
     44 }
     45 
     46 //大小操作 
     47 //.size()  .resize() .capacity()
     48 void test03() {
     49     vector<int> v1 = { 120,540,4,54,89 };
     50 
     51     cout << "size :" << v1.size() << endl;//.size()访问元素个数
     52 
     53     if (v1.empty()) {//.empty()判断对象是否为空 空返回真
     54         cout << "v1为空" << endl;
     55     }
     56     else {
     57         cout << "v1不为空" << endl;
     58     }
     59     //修改容器大小.resize()
     60     printVector(v1);
     61     v1.resize(2);//修改容器大小为2
     62     printVector(v1);//超出范围的元素被删除 
     63     v1.resize(6);//修改容器大小为6 原有元素个数<修改后的个数 默认添加0
     64     printVector(v1);
     65     v1.resize(9,1);//修改容器大小为9 原有元素个数<修改后的个数 将默认添加0改为1
     66     printVector(v1);
     67 
     68     cout <<"容量 : " <<v1.capacity() << endl;//.capacity()显示容量
     69     
     70     //size可以不等于capacity
     71     for (int i = 0; i < 100000; i++) {
     72         v1.push_back(1);
     73     }
     74     cout << "size : " << v1.size() << endl;//显示容器大小
     75     cout << "容量 : " << v1.capacity() << endl;//显示容量
     76     //size不等于capacity
     77     
     78 }
     79 
     80 //vector 存取数据 .at()
     81 void test04() {
     82     vector<int> v1 = { 156,4,4,5641,654,684 };
     83 
     84     //[]重载 存取数据
     85     for (int i = 0; i < v1.size(); i++) {
     86         cout << v1[i] << " ";
     87     }
     88     cout << endl;
     89 
     90     //成员函数.at() 存取数据
     91     for (int i = 0; i < v1.size(); i++) {
     92         cout << v1.at(i) << " ";
     93     }
     94     cout << endl;
     95 
     96     //区别 at()会抛出异常
     97     try {
     98         cout << v1.at(100);
     99     }
    100     catch (...) {
    101         cout << "接到异常!" << endl;
    102     }
    103 
    104 }
    105 //数据存储操作 .front()  .back()
    106 void test05() {
    107     vector<int> v1 = { 156,4,4,5641,654,684 };
    108     cout << "v1的第一个元素为:" << v1.front() << endl; //返回第一个元素值
    109     cout << "v1的最后一个元素为:" << v1.back() << endl;//返回最后一个元素值
    110 }
    111 
    112 //插入删除 .insert() .push_back() .pop_back() .clear()
    113 void test06(){
    114     vector<int> v1 = { 156,4,4,5641,654,684 };
    115     //尾部添加 545
    116     v1.push_back(545);    
    117     v1.push_back(1);//尾部添加 1
    118     //尾部删除
    119     v1.pop_back();
    120     //在头部插入30
    121     v1.insert(v1.begin(), 30);
    122     //在尾部部插入30
    123     v1.insert(v1.end(), 30);
    124     //将30插入到v1[5]的位置
    125     v1.insert(v1.begin() + 5, 30);
    126     printVector(v1);
    127     //vector 随即访问
    128     //支持数组下标,一般支持随机访问
    129     //迭代器可以直接进行 +1,+2,+3的操作 
    130 
    131     v1 = { 84,8948,94,8948,94,89,2323,489,48,94 };
    132     printVector(v1);
    133     //删除第一个元素
    134     v1.erase(v1.begin());
    135     printVector(v1);
    136     //删除v1[5]元素
    137     v1.erase(v1.begin()+5);
    138     printVector(v1);
    139     //删除最后一个元素
    140     v1.erase(v1.end() -1);
    141     printVector(v1);
    142     //删除v1[2]到v1[3]的元素
    143     v1.erase(v1.begin()+1, v1.begin() + 3);
    144     printVector(v1);
    145     //清除所有元素
    146     v1.clear();
    147     printVector(v1);
    148 }
    149 //用swap收缩空间
    150 void test07() {
    151     vector<int> v;
    152     for (int i = 0; i < 100000; i++) {
    153         v.push_back(1);
    154     }
    155     cout << "size: " << v.size() << endl;
    156     cout << "capacity: " << v.capacity() << endl;
    157 
    158     v.resize(10);
    159     cout << "size: " << v.size() << endl;
    160     cout << "capacity: " << v.capacity() << endl;
    161 
    162     //收缩capacity    
    163     //vector<int>(v) 用v初始化匿名对象* 
    164     //swap 交换指针指向 将v空间指向匿名对象的空间
    165     //匿名对象析构 结束
    166     vector<int>(v).swap(v);
    167     cout << "size: " << v.size() << endl;
    168     cout << "capacity: " << v.capacity() << endl;
    169 }
    170 
    171 //reserve 和 resize函数的区别
    172 //reserve 预留空间
    173 //resize  修改大小
    174 void test08() {
    175     int num = 0;
    176     int* addr = NULL;
    177 
    178     vector<int> v;
    179     v.reserve(100000);//预留空间 减少拷贝次数
    180     for (int i = 0; i < 10000; i++) {
    181         v.push_back(i);
    182         if (addr != &(v[0])) { //计算有多少次空间的申请与释放
    183             addr = &(v[0]);
    184             num++;
    185         }
    186     }
    187     cout << "num:" << num<<endl;
    188 }
    189 
    190 
    191 int main() {
    192     test08();
    193 }
  • 相关阅读:
    报表开发之扩展GROUP BY
    Leetcode--easy系列9
    datatable 前台和后台数据格式
    C实现头插法和尾插法来构建单链表(带头结点)
    HDOJ 题目1520 Anniversary party(树形dp)
    windows环境利用apache 配置虚拟主机
    POJ--1966--Cable TV Network【无向图顶点连通度】
    Linux Shell脚本编程学习笔记和实战
    win10 bcdedit加入vhdx启动
    设计模式之Mediator模式(笔记)
  • 原文地址:https://www.cnblogs.com/likeghee/p/10170318.html
Copyright © 2020-2023  润新知