当前位置:首页 C++ > 正文

C++ STL容器之vector和常用接口的实现

作者:野牛程序员:2024-01-03 21:06:10 C++阅读 2625

vector 是 C++ STL(标准模板库)中的一个动态数组容器,它提供了动态数组的功能,并且在尾部进行快速插入和删除操作。下面是 vector 的常用接口及其简要说明:

  1. 构造函数:

    • vector(): 创建一个空的 vector。

    • vector(size_type n): 创建一个包含 n 个元素的 vector。

    • vector(size_type n, const value_type& val): 创建一个包含 n 个值为 val 的元素的 vector。

    • vector(const vector& other): 复制构造函数,创建一个与另一个 vector 相同的副本。

  2. 赋值和交换:

    • operator=: 将一个 vector 的内容赋值给另一个。

    • assign(first, last): 用区间 [first, last) 内的元素赋值给 vector。

    • swap(other): 交换两个 vector 的内容。

  3. 元素访问:

    • operator[]: 访问指定位置的元素,不进行越界检查。

    • at(pos): 访问指定位置的元素,进行越界检查。

    • front(): 返回第一个元素的引用。

    • back(): 返回最后一个元素的引用。

    • data(): 返回指向 vector 内部数组的指针。

  4. 迭代器:

    • begin(): 返回指向第一个元素的迭代器。

    • end(): 返回指向尾部的下一个位置的迭代器。

    • rbegin(): 返回指向最后一个元素的逆向迭代器。

    • rend(): 返回指向首部的下一个位置的逆向迭代器。

  5. 容量:

    • size(): 返回 vector 中元素的个数。

    • max_size(): 返回 vector 可以包含的最大元素数。

    • capacity(): 返回 vector 当前分配的存储容量。

    • empty(): 检查 vector 是否为空。

    • reserve(n): 将 vector 的存储容量调整为至少 n。

  6. 修改容器:

    • push_back(val): 在 vector 的尾部插入一个元素。

    • pop_back(): 删除 vector 的最后一个元素。

    • insert(position, val): 在指定位置插入一个元素。

    • erase(position): 删除指定位置的元素。

    • clear(): 删除 vector 的所有元素。

  7. 比较操作:

    • ==, !=, <, <=, >, >=: 用于比较两个 vector 的内容。

  8. 其他操作:

    • emplace_back(args...): 在 vector 的尾部原地构造一个元素。

    • emplace(position, args...): 在指定位置原地构造一个元素。

    • shrink_to_fit(): 尝试减小 vector 的存储容量,使其容量等于其大小。

这些是 vector 的一些常用接口,可以根据需要选择合适的接口来操作和管理动态数组。

#include <iostream>
#include <vector>

int main() {
    // 构造函数
    std::vector<int> myVector; // 创建一个空的 vector
    std::vector<int> anotherVector(5, 10); // 创建包含 5 个值为 10 的元素的 vector

    // 赋值和交换
    myVector = anotherVector; // 使用 operator= 赋值
    myVector.assign(3, 7); // 使用 assign 赋值,包含 3 个值为 7 的元素
    myVector.swap(anotherVector); // 交换两个 vector 的内容

    // 元素访问
    int firstElement = myVector[0]; // 访问第一个元素
    int secondElement = myVector.at(1); // 访问第二个元素(进行越界检查)

    // 迭代器
    for (std::vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // 容量
    std::cout << "Size: " << myVector.size() << std::endl;
    std::cout << "Capacity: " << myVector.capacity() << std::endl;

    // 修改容器
    myVector.push_back(42); // 在尾部插入一个元素
    myVector.pop_back(); // 删除最后一个元素
    myVector.insert(myVector.begin() + 2, 99); // 在指定位置插入一个元素
    myVector.erase(myVector.begin() + 1); // 删除指定位置的元素
    myVector.clear(); // 删除所有元素

    // 比较操作
    if (myVector == anotherVector) {
        std::cout << "Vectors are equal." << std::endl;
    } else {
        std::cout << "Vectors are not equal." << std::endl;
    }

    // 其他操作
    myVector.emplace_back(100); // 在尾部原地构造一个元素
    myVector.emplace(myVector.begin() + 1, 50); // 在指定位置原地构造一个元素
    myVector.shrink_to_fit(); // 尝试减小 vector 的存储容量

    return 0;
}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击