vector详解

本文深入探讨了C++容器vector的使用方法,包括构造函数、迭代器操作、数组扩展功能及关系运算符应用。通过实例展示了如何创建、复制、修改vector数组,并详细解释了vector的开始、结束、逆序迭代器以及数组大小操作等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

立此留念。

本篇文章来源于《c++ primer》第四版第四章《容器和算法》和http://www.cplusplus.com/reference/vector/vector/ 上的有关英文文档内容

vector是一个类似于数组的容器,可以储存连续的空间。区别在于:

compared to arrays, vectors consume more memory in exchange for the ability to manage storage and grow dynamically in an efficient way
但我们只需要了解vector的用法(常用于OJ题),和在工程项目中的实践就好。

一. vector的constructor用法有多种,这里选择了c++ 11标准下最常用的四种:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int main(void)
{
	vector<int> v1();    //默认为空白的数组
	vector<int> v2(4,100);  //vector(n,value),构建n个value值得数组
	vector<int> v3(v2);     //进行拷贝数组
	vector<int> v4(v3.begin(),v3.begin()+v3.size()/2); //用迭代器来实现
	for(int i=0;i<v4.size();i++)
        cout<<v4[i]<<endl;     //输出结果为2个100

}<strong>
</strong>

二. begin、end:返回数组的起始和结束值,begin()指向第一个元素,end()指向最后一个元素的下一位置

      rbegin、rend,与上面相反,返回的是逆序迭代器,注意定义指针为vector<int>::reverse_iterator

     书上还有提到const_(reverse)_iterator,看是否为只读类型的。

int i=0;
vector<int>::reverse_iterator re = myvector.rbegin();
  for (; re!= myvector.rend(); ++rit)
    *re = ++i;  //从后向前赋值为1,2,3,4,5 按照顺序输出时为1,2,3,4,5

三. vector数组提供了push_back()功能

vector提供了push_back()的方法,在之后添加元素。

而list和deque多提供了方法push_front(),在之前添加元素

for(int i=0;i<4;i++)
list.push_back(i);
list.push_front(i); 两者返回的都是void值。
c.insert(p,t),迭代器p之前添加元素t,返回新元素的迭代器;
// vector<string> v1; v1.insert(v1.begin(),”test”) 等价于v1.push_back(“test”);
// 实现循环赋值
   vector<string>::iterator it=v1.begin();
  while(it!=v1.end())
it=insert(it,”test”);

c.insert(p,n,t),在p之前添加n个元素t,返回void;

c.insert(p,b,e),在迭代器p指向的元素之前添加迭代器b和e之间元素,返回void
顺便可以实现数组织间赋值
string arr[4]={“1st”,”2nd”,”3rd”,”4th”};
v1.insert(v1.end(),arr,arr+3);

这里还提到了说:比如说我们在循环操作时用it!=v1.end(),而不是

定义last=v1.end(),然后测试it!=last,因为插入元素会导致元素的迭代器失效


四.

9.3.4  关系操作符

只支持同类型数组、同类型元素的比较

比如:vector<int> v1,v2;

abc与abcde比较,abcde更长,后者大;

678与12345比较,第一个6>1,则之后不用比较;


9.3.5 容器的大小操作

c.size() 返回元素个数
c.max_size() 返回可以保存的最多的元素个数
c.empty() 为空,返回true;否,返回false;



标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
C++中的`std::vector`是一个动态数组容器,属于标准模板库(STL)的一部分。它提供了在运行时动态调整大小的能力,并且支持随机访问元素[^1]。 ### 功能与特性 #### 1. 动态大小 `std::vector`可以在程序执行期间动态地增加或减少其大小。这意味着不需要预先知道数组的大小[^1]。 ```cpp std::vector<int> vec; vec.push_back(10); // 添加元素到向量末尾 vec.pop_back(); // 移除最后一个元素 ``` #### 2. 随机访问 可以通过索引直接访问`std::vector`中的任意元素,这使得访问速度非常快[^1]。 ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; int thirdElement = vec[2]; // 访问第三个元素 ``` #### 3. 迭代器支持 `std::vector`支持迭代器,可以用来遍历容器中的元素。这对于删除特定条件下的元素特别有用。 ```cpp std::vector<int> a = {12, 23, 34, 45, 56, 67, 78, 89}; auto iter = a.begin(); while (iter != a.end()) { if (*iter > 30) { iter = a.erase(iter); // 删除大于30的元素并更新迭代器 } else { ++iter; // 否则继续下一个元素 } } ``` #### 4. 容量管理 `std::vector`提供了多种方法来管理和查询容量,如`capacity()`、`reserve()`和`shrink_to_fit()`等。 ```cpp std::vector<int> vec; vec.reserve(100); // 预留至少能容纳100个元素的空间 vec.shrink_to_fit(); // 尝试减少内存使用以匹配当前元素数量 ``` #### 5. 元素插入与删除 除了`push_back`和`pop_back`之外,还可以使用`insert`和`erase`来进行更复杂的操作。 ```cpp std::vector<int> vec = {1, 2, 4, 5}; vec.insert(vec.begin() + 2, 3); // 在第三个位置插入3 vec.erase(vec.begin() + 2); // 删除第三个位置的元素 ``` #### 6. 空间分配 当需要更多的空间时,`std::vector`会自动重新分配内存。这种行为可以通过`allocator`来定制。 ```cpp std::vector<int>::allocator_type alloc = vec.get_allocator(); ``` #### 7. 异常安全性 大多数`std::vector`的操作都保证了基本的异常安全,即如果抛出异常,对象的状态仍然有效。 #### 8. 性能优化 由于`std::vector`内部实现为连续存储,因此对于顺序访问和缓存友好性非常好。然而,频繁的插入和删除可能导致性能下降[^1]。 #### 9. 多维向量 `std::vector`也可以嵌套使用,创建多维数组结构[^1]。 ```cpp std::vector<std::vector<int>> matrix = {{1, 2}, {3, 4}}; ``` #### 10. 自定义类型支持 不仅可以存储内置类型的元素,还可以存储用户自定义类的对象。 ```cpp struct Point { int x, y; }; std::vector<Point> points; points.push_back({1, 2}); ``` 通过上述功能和特性的介绍,可以看到`std::vector`是一个强大而灵活的数据结构,适用于各种不同的应用场景。正确理解和利用这些特性可以帮助开发者编写高效且易于维护的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值