STL--vector

本文介绍了C++标准库中的vector容器类,详细解释了四种构造函数的使用方法,并展示了如何通过构造函数初始化向量。此外,还提供了vector常用成员函数的例子,帮助读者更好地理解和使用vector。

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

向量(vector容器类):#include <vector>,vector是一种动态数组,是基本数组的类模板。其内部定义了很多基本操作。既然这是一个类,那么它就会有自己的构造函数。vector 类中定义了4中种构造函数:

·  默认构造函数,构造一个初始长度为0的空向量,如:vector<int> v1;

·  带有单个整形参数的构造函数,此参数描述了向量的初始大小。这个构造函数还有一个可选的参数,这是一个类型为T的实例,描述了各个向量种各成员的初始值;如:vector<int> v2(n,0); 如果预先定义了:n,他的成员值都被初始化为0;

·  复制构造函数,构造一个新的向量,作为已存在的向量的完全复制,如:vector<int> v3(v2);

·  带两个常量参数的构造函数,产生初始值为一个区间的向量。区间由一个半开区间[first,last) 来指定。如:vector<int> v4(first,last)

#include <cstring>   
#include <vector>  
#include <iostream>  
using namespace std;  
   
int ar[10] = {  12, 45, 234, 64, 12, 35, 63, 23, 12, 55  };  
char* str = "Hello World";  
   
int main()  
{  
    vector <int> vec1(ar, ar+10);   //first=ar,last=ar+10,不包括ar+10  
    vector < char > vec2(str,str+strlen(str)); //first=str,last= str+strlen(str),  
    cout<<"vec1:"<<endl;    
    //打印vec1和vec2,const_iterator是迭代器,后面会讲到  
    //当然,也可以用for (int i=0; i<vec1.size(); i++)cout << vec[i];输出  
    //size()是vector的一个成员函数  
    for(vector<int>::const_iterator p=vec1.begin();p!=vec1.end(); ++p)  
        cout<<*p;  
        cout<<'/n'<<"vec2:"<<endl;  
    for(vector< char >::const_iterator p1=vec2.begin();p1!=vec2.end(); ++p1)  
        cout<<*p1;  
    cout<<'/n';  
    return 0;  
}
 

vector的成员函数:begin(),end(),push_back(),assign(),front(),back(),erase(),empty(),at(),size()。pop_back()。

push_back()是将数据放入vector(向量)或deque(双端队列)的标准函数。Insert()是一个与之类似的函数,然而它在所有容器中都可以使用,但是用法更加复杂。end()实际上是取末尾加一,以便让循环正确运行--它返回的指针指向最靠近数组界限的数据。



### C++ STL Vector 使用指南 #### 向量简介 `std::vector` 是一种动态数组,能够自动调整大小来容纳新元素。相比固定尺寸的 `std::array`,它提供了更灵活的数据存储方式[^4]。 #### 创建与初始化 可以创建不同类型的向量并对其进行初始化: ```cpp // 定义一个整数型向量 std::vector<int> intVector; // 初始化含有三个元素{1, 2, 3}的向量 std::vector<int> initVector = {1, 2, 3}; // 使用n个相同值elem初始化向量 size_t n = 5; int elem = 7; std::vector<int> sameValueVec(n, elem); ``` #### 添加和移除元素 支持多种方法用于增加或减少向量内的项目数量: - **push_back()**: 在向量末尾追加单个项目。 ```cpp int newItem = 9; intVector.push_back(newItem); // 追加到末尾 ``` - **pop_back()**: 移除最后一个元素而不返回其值。 ```cpp if (!intVector.empty()) { intVector.pop_back(); } ``` - **insert()**: 插入多个元素至指定位置。 ```cpp auto pos = intVector.begin() + 2; // 指定插入的位置 intVector.insert(pos, 4); // 单一数值插入 intVector.insert(pos, 3, 6); // 多个重复数值插入 ``` - **erase()**: 删除特定范围内的元素或者通过迭代器删除单一元素[^2]。 ```cpp // 清除第一个元素 if(!intVector.empty()){ intVector.erase(intVector.begin()); } // 或者清除某个具体位置上的元素 size_t indexToRemove = 3; if(indexToRemove < intVector.size()){ intVector.erase(intVector.begin() + indexToRemove); } ``` #### 访问元素 提供安全的方式访问内部储存的内容: - **下标运算符[]** - **at()** 方法(带边界检查) ```cpp if (!initVector.empty()) { std::cout << "First element is " << initVector[0]; try{ std::cout << "\nor first with at(): " << initVector.at(0); } catch(const std::out_of_range& e){ std::cerr << "Error accessing out of range."; } } ``` #### 赋值操作 允许整体替换现有内容或将两个对象之间的数据互相交换[^5]: ```cpp // 整体复制另一个向量的内容 sameValueVec.assign(initVector.begin(), initVector.end()); // 数据交换 sameValueVec.swap(initVector); // 等价于上面的操作也可以这样写 sameValueVec = initVector; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值