vector的简单应用

本文探讨了使用C++ STL中的Vector容器进行反向遍历时可能遇到的问题,并给出了正确的实现方式。主要讨论了如何避免由于vector::size_type类型的特性导致的循环异常。

2. 以下反向遍历array数组的方法有什么错误?[STL易]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍历array数组
{
    cout << array[i] << endl;
}

答:首先数组定义有误,应加上类型参数:vector<int> array。其次vector::size_type被定义为unsigned int,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环失去控制。

编译通过的代码:

 

 

运行后可能会地址访问异常而停止。

 

 

 

<think>嗯,用户想学习STL vector的入门教程和基本使用方法。首先,我需要回顾一下C++ STL中vector的基础知识。根据引用[1],vector是动态数组,属于模板类,使用前需要包含头文件<vector>和命名空间std。那应该先介绍头文件和命名空间的部分。 接下来,用户可能需要知道如何创建vector对象。引用[3]提到创建vector的几种方式,比如默认构造、指定元素个数和初始值,还有通过迭代器范围初始化。这部分需要详细说明,并给出示例代码,比如vector<int> v1; 或者vector<int> v2(5, 0);。 然后是关于基本操作的内容,比如添加元素push_back、访问元素用[]或at(),还有容量操作size()、capacity()等。引用[4]中提到了迭代器遍历的方法,应该展示用begin()和end()遍历vector的例子,同时说明如何修改元素值。 内存管理也是vector的重要部分,特别是shrink_to_fit()和swap技巧。引用[2]中的例子用临时对象和swap来收缩内存,这个需要解释清楚原理,比如std::vector<int>(vec).swap(vec)如何减少内存占用。 用户可能还需要一些简单的示例代码来演示这些操作,比如初始化、添加元素、遍历、删除元素等步骤。同时,要注意代码的格式正确,符合LaTeX的要求,用$$包围独立代码块,行内代码用$符号。 最后,生成相关问题的时候,要围绕vector的深入使用、性能优化、与其他容器的比较等方向提问,帮助用户进一步学习。需要确保问题相关且有引导性,比如问内存自动扩展机制或者如何避免迭代器失效。 检查一下引用的标注是否正确,每个引用来源是否对应正确的内容。比如引用[1]是关于头文件和基本介绍,引用[2]是内存收缩的方法,引用[3]和[4]涉及创建和遍历。确保在回答中正确引用这些内容,末尾加上引用标识。 总结一下,回答的结构应该是先介绍vector是什么,然后分点讲解头文件、创建方法、基本操作、内存管理和示例代码,最后附上相关问题。保持语言简洁,用中文,符合用户的要求。</think>### STL vector 入门教程及基本使用方法 #### 一、基本概念与头文件 `std::vector` 是 C++ STL 中的动态数组容器,支持自动扩容、随机访问和高效的元素操作。使用前需包含头文件 `<vector>` 并声明命名空间 `std`[^3]: ```cpp #include <vector> using namespace std; ``` #### 二、创建 vector 对象 1. **默认构造** ```cpp vector<int> v1; // 空向量 ``` 2. **指定元素个数和初始值** ```cpp vector<int> v2(5, 0); // 包含5个0的向量 ``` 3. **通过迭代器范围初始化** ```cpp int arr[] = {1, 2, 3}; vector<int> v3(arr, arr + 3); // 包含1,2,3的向量 ``` #### 三、基本操作 1. **添加元素** ```cpp v1.push_back(10); // 在尾部插入元素10 ``` 2. **访问元素** ```cpp int x = v2[0]; // 通过下标访问(不检查越界) int y = v2.at(1); // 通过at()访问(检查越界,抛出异常) ``` 3. **容量操作** ```cpp int size = v2.size(); // 获取元素数量 bool isEmpty = v1.empty(); // 判断是否为空 v2.reserve(100); // 预分配容量为100 ``` #### 四、迭代器遍历 通过迭代器可遍历并操作元素[^4]: ```cpp vector<int> vec = {1, 2, 3}; for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { *it += 1; // 修改元素值 cout << *it << " "; } // 输出:2 3 4 ``` #### 五、内存管理 1. **收缩内存** 使用临时对象和 `swap` 释放多余内存[^2]: ```cpp vector<int>(vec).swap(vec); // 强制内存收缩 ``` 2. **清空向量** ```cpp vec.clear(); // 移除所有元素(不释放内存) vec.shrink_to_fit(); // 释放未使用内存(C++11) ``` #### 六、示例代码 ```cpp #include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; nums.push_back(10); nums.push_back(20); nums.pop_back(); // 删除最后一个元素 for (int num : nums) { cout << num << " "; // 输出:10 } return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值