C++ vector 容器

C++ vector 容器

概述

C++的vector是一种非常强大的容器,它提供了动态数组的功能,可以自动调整大小以适应数据的增加或减少。vector是C++标准模板库(STL)中的一部分,它支持对元素的随机访问,并且在插入和删除操作时提供了高效的性能。

vector 的基本特性

动态数组

vector内部使用动态数组来存储元素。这意味着它可以在运行时增加或减少其容量,从而无需手动管理内存。

随机访问

vector支持对元素的随机访问,这意味着你可以使用索引来快速访问任何位置的元素。

大小可变

vector的大小是可变的,你可以使用push_back()和pop_back()来添加和删除元素。

性能

vector在插入和删除元素时通常比其他容器(如list)要快,因为它支持连续内存。

vector 的使用

创建 vector

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector;
    return 0;
}

添加元素

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector;
    myVector.push_back(10);
    myVector.push_back(20);
    return 0;
}

访问元素

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    int firstElement = myVector[0]; // 访问第一个元素
    return 0;
}

修改元素

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    myVector[2] = 100; // 将第三个元素修改为100
    return 0;
}

删除元素

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    myVector.pop_back(); // 删除最后一个元素
    return 0;
}

获取大小

cpp 复制代码
#include <vector>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};
    int size = myVector.size(); // 获取vector的大小
    return 0;
}

vector 的性能分析

时间复杂度

  • push_back() 和 pop_back():平均情况下为 O(1)。
  • at():平均情况下为 O(1)。
  • front() 和 back():平均情况下为 O(1)。
  • operator[]:平均情况下为 O(1)。
  • erase():平均情况下为 O(n),因为可能需要移动后续元素。
  • insert():平均情况下为 O(n),因为可能需要移动后续元素。

空间复杂度

vector的空间复杂度取决于其存储的元素数量。在添加元素时,vector会自动增加其容量,这可能会导致额外的内存分配。

vector 的注意事项

  • vector不会自动释放内存,所以你需要确保在不再需要时使用clear()或析构函数来释放内存。
  • 在添加大量元素时,vector可能会进行多次内存分配和复制,这可能会导致性能问题。在这种情况下,可以考虑使用其他容器,如std::deque或std::list。

总结

vector是C++中非常强大和常用的容器之一。它提供了动态数组的功能,支持随机访问和大小可变。在处理大量数据时,vector是一个很好的选择。然而,在使用vector时,需要注意性能和内存管理问题。

相关推荐
学逆向的8 小时前
C 堆区内存管理
c语言·开发语言·网络安全
huoyueyi8 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
OpenAnolis小助手10 小时前
PHP 两个严重漏洞曝光,龙蜥社区 24 小时完成 3 版本修复
开发语言·操作系统·php·龙蜥社区
阿尼卡~10 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
hhhjhl12 小时前
Undici 跨端三方库仓颉适配全流程
java·开发语言·ubuntu
染指111012 小时前
158.Agent-LangGraph-子图(共享状态和不共享状态模式)
开发语言·人工智能·python·ui·agent·agents
wangchunyu11412 小时前
JAVA JVM内存结构与运行时数据区
java·开发语言·jvm
slongzhang_12 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
云和数据.ChenGuang13 小时前
Python 常见特殊方法详解:__new__、__init__、__del__、__str__、__repr__ 与 __getattribute__
开发语言·人工智能·python·1024程序员节
xyouyuweizhu14 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python