C++:vector的介绍

本文详细介绍了C++中的vector容器,它是STL的一部分,提供动态数组功能,支持各种操作如随机访问、插入、删除,以及内存管理和预分配。通过实例展示了vector的构造方法、修改操作和内存优化技巧如reserve()。
摘要由CSDN通过智能技术生成

C++的vector是一种可变长度的动态数组,被广泛用于C++编程中。它是标准模板库(STL)中的容器之一,提供了比原始数组更灵活和方便的操作。

vector可以存储任意类型的元素,包括基本类型(如整数和浮点数)和自定义类型(如类和结构体)。它的大小可以根据需要动态调整,而不需要手动管理内存。

vector支持随机访问,即可以通过下标直接访问容器中的元素。它还提供了一系列的成员函数和操作符,如插入、删除和查找等,使得对元素的操作变得更加方便和高效。

vector的内部实现使用了动态数组,当存储元素的个数超过当前容量时,会自动分配更大的内存空间,并将元素从旧的内存复制到新的内存中。这种动态分配和释放内存的特性使得vector能够有效地处理不可预知的元素个数。

要使用vector,首先需要包含头文件<vector>。然后可以用vector< T >声明一个vector对象,其中T表示要存储的元素类型。例如,可以使用vector< int >来声明一个存储整数的vector对象。

vector是C++中非常实用的容器,它提供了简洁、高效的操作,使得动态数组的使用变得更加方便。使用vector可以避免手动管理内存和处理数组大小的复杂逻辑。


构造函数

默认构造函数:

vector();

用于创建一个空的vector。

示例:

vector<int> vec;  // 创建一个空的整数类型的vector

带有初始值的构造函数:

vector(size_type count, const T& value = T());

创建包含count个元素的vector,每个元素都初始化为value的值。

 示例:

vector<int> vec(5, 10);  // 创建一个包含5个元素,每个元素都为10的整数类型的vector

基于范围的构造函数:

template <class InputIterator>
vector(InputIterator first, InputIterator last);

创建一个包含[first, last)范围内元素的vector。
示例:

int arr[] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr + 5);  // 创建一个包含数组中所有元素的整数类型的vector

拷贝构造函数:

vector(const vector& other);

示例:

vector<int> vec1(5, 10);  // 创建一个包含5个元素,每个元素都为10的整数类型的vector
vector<int> vec2(vec1);   // 创建一个与vec1相同元素的整数类型的vector

修改操作

push_back

push_back()vector类的成员函数之一,用于在vector的尾部插入一个新的元素。

push_back()函数的语法如下:

void push_back (const value_type& val);

需要注意的是,push_back()函数的参数是一个常量引用,这是为了防止在插入元素时进行不必要的拷贝操作,以提高性能。


pop_back

vectorpop_back()函数用于删除向量中的最后一个元素,并将容器的大小减1。不返回任何值。

需要注意的是,如果vector是空的,调用pop_back()函数将引发未定义的行为。因此,在使用pop_back()函数之前,最好先检查vector是否为空。可以使用empty()函数来完成此操作。


erase

vectorerase函数用于删除指定位置的元素,其原型如下:

erase一共三种用法:

erase(pos,n);
//删除从下标pos开始的n个字符,比如erase(0,1)就是删除第一个字符
erase(position);
//删除postion处的一个字符(position是一个string类型的迭代器)
erase(first,last)
//删除从first到last之间的字符(first和last都是迭代器)
 
back

vectorback函数用于返回容器中最后一个元素的引用,即最后一个元素的值。如果容器为空,则未定义行为。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec;

    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    int& lastElement = vec.back(); // 获取最后一个元素的引用

    std::cout << "最后一个元素的值为:" << lastElement << std::endl;

    return 0;
}

需要注意的是,如果容器为空,那么调用back函数将会导致未定义行为。因此,在使用back函数之前,最好先使用empty函数检查容器是否为空。 


resize
vector的resize()函数是用于改变vector的大小的,它可以增加或缩小vector的元素数量。

resize()函数有两种形式:

1.resize(n):将vector的大小改变为n。如果n小于当前的大小,则vector将被截断为前n个元素。如果n大于当前的大小,则vector的大小将增加,在末尾添加默认值的元素。

2.resize(n, val):将vector的大小改变为n,并用val填充新添加的元素。如果n小于当前的大小,则vector将被截断为前n个元素。如果n大于当前的大小,则vector的大小将增加,新添加的元素用val填充。

#include <iostream>
#include <vector>

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};

    // 使用resize(n)来增加vector的大小
    nums.resize(7);
    std::cout << "After resize(7): ";
    for (int num : nums) {
        std::cout << num << " ";
    }
    // 输出: After resize(7): 1 2 3 4 5 0 0

    // 使用resize(n, val)来增加vector的大小,并用val填充
    nums.resize(10, 9);
    std::cout << "\nAfter resize(10, 9): ";
    for (int num : nums) {
        std::cout << num << " ";
    }
    // 输出: After resize(10, 9): 1 2 3 4 5 0 0 9 9 9

    // 使用resize(n)来缩小vector的大小
    nums.resize(3);
    std::cout << "\nAfter resize(3): ";
    for (int num : nums) {
        std::cout << num << " ";
    }
    // 输出: After resize(3): 1 2 3

    return 0;
}
reserve

由于vector的内存管理可能涉及动态分配和释放内存,这个过程可能会很耗时。为了优化性能,我们可以使用vectorreserve函数来预分配内存空间,以避免频繁的内存分配和释放操作。

reserve函数的函数原型如下:

void reserve (size_type n);

参数n指定了预分配的内存空间大小,以元素个数为单位。这意味着reserve函数将为vector预分配至少n个元素所需的内存空间。

注意,reserve函数只会增加capacity,不会改变size的值。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值