• C++ vector容器


    目录

    1. vector基本概念

    2. vector构造函数

    3. vector赋值操作

    4. vector容量和大小

    5. vector插入和删除

    6. vector数据存取

    7. vector互换容器

    8. vector预留空间


    1. vector基本概念

    功能:

            vector数据结构和数组非常相似,也称为单端数组

    vector与普通数组区别:

            不同之处在于数组是静态空间,而vector可以动态扩展

    动态扩展:

            并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。

             vector容器的迭代器是支持随机访问的迭代器

    2. vector构造函数

    功能:创建vector容器

     1.默认构造:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. void printVector(vector<int> &v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << "*it = " << *it << endl;
    10. }
    11. }
    12. //vector容器构造
    13. void test01()
    14. {
    15. vector<int> v1; //默认构造 无参构造
    16. for (int i = 0; i < 10; i++)
    17. {
    18. v1.push_back(i);
    19. }
    20. printVector(v1);
    21. }
    22. int main() {
    23. test01();
    24. system("pause");
    25. return 0;
    26. }

    结果:

     

    2.通过区间方式构造

     

    3.通过n个elem方式构造

    输出结果为10个100 

    4.拷贝构造

     

    3. vector赋值操作

    功能:给vector进行赋值

    函数原型:

     1. 通过 = 赋值

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. void printVector(vector<int> &v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << "*it = " << *it << endl;
    10. }
    11. }
    12. //vector赋值
    13. void test01()
    14. {
    15. vector<int> v1;
    16. for (int i = 0; i < 10; i++)
    17. {
    18. v1.push_back(i);
    19. }
    20. printVector(v1);
    21. //赋值 operator=
    22. vector <int> v2;
    23. v2 = v1;
    24. printVector(v2);
    25. }
    26. int main() {
    27. test01();
    28. system("pause");
    29. return 0;
    30. }

     2.通过assign赋值

    4. vector容量和大小

    功能:对vector的容量和大小操作

    函数原型:

     示例:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. void printVector(vector<int> &v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << "*it = " << *it << endl;
    10. }
    11. }
    12. //vector赋值
    13. void test01()
    14. {
    15. vector<int> v1;
    16. for (int i = 0; i < 10; i++)
    17. {
    18. v1.push_back(i);
    19. }
    20. cout << "v1是否为空:" << v1.empty() << endl;
    21. cout << "v1是的容量为:" << v1.capacity() << endl;
    22. cout << "v1是的大小:" << v1.size() << endl;
    23. //重新指定大小
    24. v1.resize(15,10);
    25. printVector(v1);
    26. }
    27. int main() {
    28. test01();
    29. system("pause");
    30. return 0;
    31. }

     结果:

     

    5. vector插入和删除

    功能:对vector容器进行插入、删除操作

    函数原型:

     示例:

    pop_back()

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. void printVector(vector<int> &v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << "*it = " << *it << endl;
    10. }
    11. }
    12. //vector赋值
    13. void test01()
    14. {
    15. vector<int> v1;
    16. for (int i = 0; i < 10; i++)
    17. {
    18. v1.push_back(i*10);
    19. }
    20. v1.pop_back(); //尾部删除一个元素
    21. printVector(v1);
    22. }
    23. int main() {
    24. test01();
    25. system("pause");
    26. return 0;
    27. }

    结果:

     

    insert()

    (1) 

     结果:

    (2) 

     

     

    erase()

    (1) 

     

     

    (2)

     

    clear()

     

    6. vector数据存取

    功能:对vector中的数据的存取操作

    函数原型:

     示例:

    1. 利用[]访问数组中元素:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. //vector赋值
    6. void test01()
    7. {
    8. vector<int> v1;
    9. for (int i = 0; i < 10; i++)
    10. {
    11. v1.push_back(i*10);
    12. }
    13. //利用[]访问数组中元素
    14. cout << "第一个元素:" << v1[0] << endl;
    15. }
    16. int main() {
    17. test01();
    18. system("pause");
    19. return 0;
    20. }

    结果:

     

    2. 利用at方式访问元素

     

    3.获取第一个元素:

    v1.font()

    4.获取最后一个元素

    v1.back()

    7. vector互换容器

    功能:实现两个容器内元素进行互换

    函数原型:

    示例:

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. void printVector(vector<int> &v)
    6. {
    7. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    8. {
    9. cout << "*it = " << *it << endl;
    10. }
    11. }
    12. //vector赋值
    13. void test01()
    14. {
    15. //创建两个容器并赋值
    16. vector<int> v1;
    17. vector<int> v2;
    18. for (int i = 0; i < 10; i++)
    19. {
    20. v1.push_back(i);
    21. v2.push_back(i * 10);
    22. }
    23. v1.swap(v2); //v1与v2互换
    24. printVector(v1);
    25. printVector(v2);
    26. }
    27. int main() {
    28. test01();
    29. system("pause");
    30. return 0;
    31. }

    结果:

     

    利用swap()收缩内存空间

    不用swap():

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. //vector赋值
    6. void test01()
    7. {
    8. //创建容器并赋值
    9. vector<int> v1;
    10. for (int i = 0; i < 10000; i++)
    11. {
    12. v1.push_back(i);
    13. }
    14. cout << "v的容量为:" << v1.capacity() << endl;
    15. cout << "v的大小为:" << v1.size() << endl;
    16. v1.resize(3);//重新指定大小
    17. cout << "v的容量为:" << v1.capacity() << endl;
    18. cout << "v的大小为:" << v1.size() << endl;
    19. }
    20. int main() {
    21. test01();
    22. system("pause");
    23. return 0;
    24. }

    结果:

     发现只存一个数容量还是原来这么大,非常浪费内存空间

    利用swap():

    1. #include
    2. using namespace std;
    3. #include
    4. #include
    5. //vector赋值
    6. void test01()
    7. {
    8. //创建容器并赋值
    9. vector<int> v1;
    10. for (int i = 0; i < 10000; i++)
    11. {
    12. v1.push_back(i);
    13. }
    14. cout << "v的容量为:" << v1.capacity() << endl;
    15. cout << "v的大小为:" << v1.size() << endl;
    16. v1.resize(3);//重新指定大小
    17. cout << "v的容量为:" << v1.capacity() << endl;
    18. cout << "v的大小为:" << v1.size() << endl;
    19. //巧用swap收缩内存
    20. vector<int>(v1).swap(v1);
    21. cout << "v的容量为:" << v1.capacity() << endl;
    22. cout << "v的大小为:" << v1.size() << endl;
    23. }
    24. int main() {
    25. test01();
    26. system("pause");
    27. return 0;
    28. }

    结果:

     

    8. vector预留空间

    功能:减少vector在动态扩展时的扩展次数

    函数原型:

     示例:

    vector动态扩展:

    1. #include
    2. using namespace std;
    3. #include
    4. void printVector(vector<int> &v)
    5. {
    6. for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    7. {
    8. cout << "*it = " << *it << endl;
    9. }
    10. }
    11. //vector赋值
    12. void test01()
    13. {
    14. //创建容器并赋值
    15. vector<int> v;
    16. int num = 0; //统计重新开辟内存的次数
    17. int *p = NULL;
    18. for (int i = 0; i < 10000; i++)
    19. {
    20. v.push_back(i);
    21. if (p != &v[0]) //如果指针p不指向v的首地址(开辟新内存会让指针失效)
    22. {
    23. p = &v[0]; //让p指向v的首地址
    24. num++;
    25. }
    26. }
    27. cout << "重新开辟内存的次数:" << num << endl;
    28. }
    29. int main() {
    30. test01();
    31. system("pause");
    32. return 0;
    33. }

    结果:

    可以看到vector在动态扩展容量时,扩展了24次,比较耗费性能

    因此可以利用 reserve 提前预留好指定的容量:

     

     结果:

     

  • 相关阅读:
    【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
    Nginx、MySQL、LNMP安装
    超级浏览器的Cookies实现跨境电商防关联
    Google Earth Engine —— 利用sentinel-1/2数据集进行土地分类59个参数案例
    一篇博客带你轻松应对java面试中的多线程与高并发
    使用Fastmonkey进行iosMonkey测试初探
    模板字面量(Template literals)介绍
    MySQL大量脏数据,如何只保留最新的一条?
    贪心算法-跳跃游戏
    Linux-查看服务器--硬件配置信息
  • 原文地址:https://blog.csdn.net/ChaoChao66666/article/details/127072791