C艹的动态数组(std::vector)

发布于 2024-04-29  34 次阅读


C艹的动态数组(std::vector)

在std命名空间中vector动态数组

可以随意增加减少,规定了类型,可存放对象

在指定位置时需要用到==迭代器==

  1. 构造函数

    • vector(): 默认构造函数。
    • vector(size_type n): 构造一个包含 n 个元素的vector
    • vector(size_type n, const value_type& val): 构造一个包含 n 个初始化为 val 的元素的vector
    • vector(const vector& x): 拷贝构造函数。
    • vector(vector&& x): 移动构造函数。
    • vector(initializer_list<value_type> il): 列表初始化。
  2. 赋值运算符

    • operator=: 赋值运算符,可以是拷贝赋值或移动赋值。
  3. 元素访问

    • operator[]: 访问指定位置的元素。
    • at(): 访问指定位置的元素,带边界检查。
    • front(): 返回vector的第一个元素。
    • back(): 返回vector的最后一个元素。
    • data(): 返回指向vector中第一个元素的指针。
  4. 迭代器

    • begin(), end(): 返回指向vector开始和结束位置的迭代器。
    • rbegin(), rend(): 返回vector的反向迭代器,指向vector末尾和开始。
  5. 容量相关

    • empty(): 检查vector是否为空。
    • size(): 返回vector中的元素个数。
    • max_size(): 返回vector可能容纳的最大元素个数。
    • reserve(): 改变vector容量。
    • capacity(): 返回vector当前的容量。
    • shrink_to_fit(): 尝试减少容量以节省空间。
  6. 修改操作

    • push_back(): 在vector的末尾添加一个元素。
    • emplace(): 在指定位置直接构造元素。
    • emplace_back(): 在vector末尾直接构造元素。
    • pop_back(): 移除vector的最后一个元素。
    • insert(): 在指定位置插入一个元素或多个元素。
    • erase(): 移除指定位置的元素或一个范围内的元素。
    • clear(): 移除所有元素,使其大小为0。
    • resize(): 改变vector中元素的数量。
    • swap(): 与另一个vector交换内容。
    • shrink_to_fit(): 请求容器减少其 capacity() 以适应其 size(),帮助节省内存。

    下面为实例

#include "iostream"
#include "vector"

struct Vertex {
    float x, y, z;

    Vertex(int x, int y, int z) : x(x), y(y), z(z) {
    }

    Vertex(const Vertex &ZZ) : x(ZZ.x), y(ZZ.y), z(ZZ.z) {//复制构造函数
        std::cout << "diaoyong" << std::endl;
    }
};

std::ostream &operator<<(std::ostream &stream, const Vertex &abc) {
    stream << abc.x << "," << abc.y << "," << abc.z;
    return stream;
}

int main() {
    std::vector<Vertex> ABC;
    ABC.reserve(3);//规定初始空间(减少push_back添加产生的复制)
    ABC.push_back({1, 2, 3});
    ABC.push_back({3, 6, 3});
    ABC.push_back({3, 6, 3});//直接添加元素,会产生复制
    ABC.emplace_back(3, 6, 3);
    ABC.emplace_back(3, 6, 3);
    ABC.emplace_back(3, 6, 3);//直接生成元素,调用构造函数
    for (int i = 0; i < ABC.size(); i++) {//正常for循环
        std::cout << ABC[i] << std::endl;
    }
    ABC.erase(ABC.begin() + 4);//erase方法删除一个元素
    for (auto &AB: ABC) {//增强for循环
        std::cout << AB << std::endl;
    }
}
QQ:2219349024
最后更新于 2024-04-29