• C++学习 --vector


    目录

    1, 什么是vector

    2, 创建vector

    2-1, 标准数据类型

    2-2, 自定义数据类型

    2-3, 其他创建方式

    3, 操作vector

    3-1, 赋值

    3-2, 添加元素

     3-2-1, 添加元素(assign)

    3-2-1-1, 标准数据类型

    3-2-1-2, 自定义数据类型

    3-2-2, 添加元素(insert)

    3-2-2-1, 标准数据类型

    3-2-2-2, 自定义数据类型

    3-2-3, 添加元素(push_back)

    3-2-3-1, 标准数据类型

    3-2-3-2, 自定义数据类型

    3-3, 查询(at)

    3-3-1, 标准数据类型

    3-3-2, 自定义数据类型

    3-4, 获取容量(capacity)

    3-5, 获取长度(size)

    3-6, 交换(swap)

    3-7, 删除元素(erase)

    3-8, 清空元素(clear)

    4, 嵌套vector


    1, 什么是vector

    C++中的一种容器数据类型, 也叫单端数组, 动态扩展, 并不是在原空间上进行扩展,而是重新找更合适的内存空间, 将原来的数据拷贝到新空间,并释放原来的空间, 迭代器支持随机访问

    2, 创建vector

    通过vector<数据类型> 对象名, 可创建vector, 数据类型可以是标准数据类型, 也可以是自定义类型

    2-1, 标准数据类型

    1. //指定容器中元素数据类型为string
    2. vector v1;

    2-2, 自定义数据类型

    1. class Myclass
    2. {
    3. public:
    4. Myclass() {};
    5. Myclass(string name, int age) :m_name(name), m_age(age) {};
    6. string m_name;
    7. int m_age;
    8. };
    9. Myclass m("aaa", 1);
    10. //容器中元素的类型为Myclass
    11. vector v1;

    2-3, 其他创建方式

    1. Myclass m("aaa", 1);
    2. vector v1;
    3. //拷贝构造方式创建
    4. vector v2(v1);
    5. //通过迭代器容器方式创建
    6. vector v3(v1.begin(), v1.end());
    7. //创建v4, 并插入5个m对象
    8. vector v4(5, m);

    3, 操作vector

    3-1, 赋值

    通过vector<数据类型> 对象名2 = 对象名1, 进行赋值

    1. vector v1;
    2. vector v2 = v1;

    3-2, 添加元素

     3-2-1, 添加元素(assign)

    assign是用新的元素替换原来vector的元素

    3-2-1-1, 标准数据类型
    1. //通过迭代器区间方式进行赋值
    2. v2.assign(v1.begin(), v1.end());
    3. //给容器v1, 赋值5个字符串a
    4. v1.assign(5, "a");
    3-2-1-2, 自定义数据类型
    1. //通过迭代器区间方式进行赋值
    2. v2.assign(v1.begin(), v1.end());
    3. Myclass m("aaa", 1);
    4. //容器中元素的类型为Myclass
    5. vector v1;
    6. //给容器v1, 赋值5个m对象
    7. v1.assign(5, m);

    3-2-2, 添加元素(insert)

    insert是向vector指定位置, 添加元素, 支持一次添加多个元素

    3-2-2-1, 标准数据类型
    1. //表示在首元素位置, 以此插入3个字符串b
    2. v1.insert(v1.begin(), 3, "b");
    3. //表示在首元素位置, 插入字符串c
    4. v1.insert(v1.begin(), "c");
    3-2-2-2, 自定义数据类型
    1. Myclass m1("aaa", 1);
    2. vector v1;
    3. //在首元素处插入m1
    4. v1.insert(v1.begin(), m1);
    5. //在首元素处插入2个m1
    6. v1.insert(v1.begin(), 2, m1);

    3-2-3, 添加元素(push_back)

    push_back是在vector的尾部添加元素, 只能单个添加

    3-2-3-1, 标准数据类型
    1. vector v1;
    2. v1.assign(3, "a");
    3. //在尾部添加c
    4. v1.push_back("c");
    3-2-3-2, 自定义数据类型
    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. vector v1;
    4. v1.assign(3, m1);
    5. //在尾部添加m2
    6. v1.push_back(m2);

    3-3, 查询(at)

    通过对象名[索引]或者对象名.at(索引), 获取vector中的元素

    3-3-1, 标准数据类型

    1. //通过索引方式查询
    2. cout << v1[0] << endl;
    3. //通过at方式查询
    4. cout << v1.at(1) << endl;
    5. //获取首元素
    6. cout << v1.front() << endl;
    7. //获取尾元素
    8. cout << v1.back() << endl;

    3-3-2, 自定义数据类型

    1. Myclass m1("aaa", 1);
    2. Myclass m2("bbb", 2);
    3. Myclass m3("ccc", 3);
    4. vector v1;
    5. v1.push_back(m1);
    6. v1.push_back(m2);
    7. v1.push_back(m3);
    8. //通过索引方式查询
    9. cout << v1[0].m_name << endl;
    10. //通过at方式查询
    11. cout << v1.at(1).m_name << endl;
    12. //获取首元素
    13. cout << v1.front().m_name << endl;
    14. //获取尾元素
    15. cout << v1.back().m_name << endl;

    3-4, 获取容量(capacity)

    通过对象名.capacity(), 获取vector的容量大小

    cout << v1.capacity() << endl;

    3-5, 获取长度(size)

    通过对象名.size(), 获取vector的元素个数

    cout << v1.size() << endl;

    3-6, 交换(swap)

    通过对象名1.size(对象名2) 交换两个vector的元素, 两个vector的数据类型需要一致

    v1.swap(v2);

    3-7, 删除元素(erase)

    通过对象名.erase(迭代器位置), 删除元素

    1. //指定迭代器位置删除元素
    2. v1.erase(v1.begin());
    3. //删除尾部元素
    4. v1.pop_back();

    3-8, 清空元素(clear)

    通过对象名.clear(), 清空vector元素

    1. v1.clear();
    2. //指定迭代器区间清空元素
    3. v1.erase(v1.begin(), v1.end());

    4, 嵌套vector

    通过vector> 对象名, 可实现嵌套vector

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. class Myclass
    6. {
    7. public:
    8. Myclass() {};
    9. Myclass(string name, int age) :m_name(name), m_age(age) {};
    10. string m_name;
    11. int m_age;
    12. };
    13. void print_v(vector>& v)
    14. {
    15. //it为外层vector的第一个元素迭代器
    16. for (vector>::iterator it = v.begin(); it != v.end(); it++)
    17. {
    18. //vit为内层vector的第一个元素迭代器
    19. for (vector::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
    20. {
    21. cout << vit->m_name << endl;
    22. }
    23. }
    24. }
    25. int main()
    26. {
    27. Myclass m1("aaa", 1);
    28. vector v1;
    29. vector> v2;
    30. v1.push_back(m1);
    31. v2.push_back(v1);
    32. print_v(v2);
    33. system("pause");
    34. return 0;
    35. }

  • 相关阅读:
    java.sql.SQLNonTransientConnectionException Public Key Retrieval is not allowed
    命 运
    大学生校园网搭建ensp
    Seata概述
    【Leetcode刷题Python】191. 位1的个数
    工具篇--分布式定时任务springBoot 整合 elasticjob使用(3)
    Go 语言初探:从基础到实战
    spark-core 源码
    2022 春节抖音视频红包系统设计与实现
    经典OJ题:找环节点——代码解析
  • 原文地址:https://blog.csdn.net/qq_25500415/article/details/134495935