孩子们,看看是谁回来了

就在今天,我考完试就急匆匆的回来了,在复习期间,一位佬给予了我很大的鼓励,并十分期待我的作品,再次感谢#qystca#。原来我是想放弃更新的,但qystca佬与粉丝们都以关注或评论来激励我,非常Thanks♪(・ω・)ノ。

回归正题,事先说明一下,由于看第二课没什么好更新的了,我就讲一下新知识点——vector容器。

在C++中,vector 是标准模板库(STL)中非常重要的容器之一,它提供了动态数组的功能。以下是关于C++中vector容器的详细介绍:

一、基本概念

  1. 动态数组

    • vector 可以看作是一个能够自动调整大小的数组。它在内部以数组的形式存储元素,当元素数量超过当前分配的内存空间时,vector 会自动分配更大的内存空间来存储更多的元素。例如,初始时vector可能分配了大小为10的内存空间来存储整数元素,当添加第11个元素时,它会重新分配更大的内存(如大小为20),并将原来的元素复制到新的内存空间,然后添加新元素。

  2. 模板类

    • vector 是一个模板类,可以存储任意类型的数据。例如,vector<int> 表示存储整数的vectorvector<double> 表示存储双精度浮点数的vector,还可以存储自定义的数据类型,如vector<MyClass>,其中MyClass是用户定义的类。

二、主要成员函数

  1. 构造函数

    • vector():默认构造函数,创建一个空的vector

    • vector(size_type n):创建一个包含n个默认初始化元素的vector。例如,vector<int> v(5);会创建一个包含5个值为0的整数元素的vector,因为整数的默认初始化值是0。

    • vector(size_type n, const T& val):创建一个包含n个值为val的元素的vector。如vector<int> v(5, 10);会创建一个包含5个值为10的整数元素的vector

    • vector(const vector& v):拷贝构造函数,创建一个与v相同的vector

  2. 元素访问

    • operator[]:通过下标访问元素,如v[2]可以获取或修改vector中第3个元素的值。需要注意的是,如果下标越界,程序的行为是未定义的。

    • at():也是通过下标访问元素,但它会进行边界检查。如果下标越界,会抛出out_of_range异常。例如,v.at(2)安全地获取第3个元素的值。

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

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

  3. 迭代器

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

    • end():返回指向vector最后一个元素之后位置的迭代器。这两个函数常用于遍历vector中的元素,例如:

      vector<int> v = {1, 2, 3, 4, 5};
      for (auto it = v.begin(); it != v.end(); ++it) {
          cout << *it << " ";
      }

      这段代码会输出vector中的所有元素。

  4. 容量相关函数

    • size():返回vector中当前元素的数量。

    • capacity():返回vector当前分配的内存可以容纳的元素数量。这个值通常大于或等于size(),因为vector会预先分配一些额外的内存以提高添加元素的效率。

    • empty():判断vector是否为空,如果为空返回true,否则返回false

    • resize(size_type n):改变vector的大小。如果新大小大于当前大小,会添加默认初始化的元素;如果新大小小于当前大小,会删除多余的元素。

    • reserve(size_type n):预先分配至少n个元素的内存空间,这可以减少在添加大量元素时的内存重新分配次数,提高效率。

  5. 修改器

    • push_back(const T& val):在vector的末尾添加一个值为val的元素。例如,v.push_back(10);会将整数10添加到vector的末尾。

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

    • insert(iterator pos, const T& val):在迭代器pos指向的位置插入一个值为val的元素。例如,v.insert(v.begin() + 2, 20);会在vector的第3个位置插入值为20的元素。

    • erase(iterator pos):删除迭代器pos指向的元素。也可以使用erase(iterator first, iterator last)删除从firstlast(不包括last)之间的所有元素。

    • clear():删除vector中的所有元素,但不会释放内存。

三、使用示例

#include<bits/stdc++.h>
int main() {
    // 创建并初始化vector
    vector<int> v = {1, 2, 3, 4, 5};

    // 访问元素
    cout << "第一个元素:" << v.front() << endl;
    cout << "最后一个元素:" << v.back() << endl;
    cout << "第3个元素:" << v[2] << endl;

    // 添加元素
    v.push_back(6);
    cout << "添加元素后,vector的大小:" << v.size() << endl;

    // 插入元素
    v.insert(v.begin() + 2, 10);
    cout << "插入元素后,vector的内容:";
    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << " ";
    }
    cout << endl;

    // 删除元素
    v.erase(v.begin() + 2);
    cout << "删除元素后,vector的内容:";
    for (int i = 0; i < v.size(); ++i) {
        cout << v[i] << " ";
    }
    cout << endl;
    return 0;
}

需要注意的是,在c++的正式版本中,vector容器只能在c++11以上版本运行。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值