动态数组vector用法

~ 2025-7-2 11:55:51

1、vector

1.1介绍

  • vector是STL容器中的一种常用的容器,和数组类似,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。
  • vector也是一种顺序容器,在内存中连续排列,因此可以通过下标快速访问,时间复杂度为O(1)。然而,连续排列也意味着大小固定,数据超过vector的预定值时vector将自动扩容。

1.2vector用法

1.2.1 创建

首先,使用vector时需要调用头文件

#include <vector>

vector的本质是模板,可以存储任何类型的数据。数组在声明前需要加上数据类型,而vector则通过模板参量设定类型。

vector<int> v1;
vector<char> v2;
vector<string> v3;

1.2.2初始化

vector<int> v1;                           //一个空数组
vector<int> v2{1,2,3,4,5};                //创建5个变量
vector<int> v3(5);                        //开辟5个空间,默认值为0
vector<int> v4(5,1);                      //开辟5个空间,初始值为1
vector<int> v5(v4);                       //把v4的值复制给v5
vector<int> v6(v4.begin(),v4.end())       //将v4的值从头开始到尾复制给v6
vector<int> v7(v4.rbegin(),v4.rend())     //将arr4的值从尾到头复制

注意使用vector v1来进行初始化时,v1里此时并没有任何值,直接访问会报错。可以用v1.resize(num)或者v1.resize(n,num)来进行初始化

#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    vec.resize(3); // 将vec的大小改为3,移除最后的两个元素
    for (int i : vec) {
        std::cout << i << " ";
    }
    return 0;
}
#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    vec.resize(10, 100); // 将vec的大小改为10,新增加的元素被初始化为100
    for (int i : vec) {
        std::cout << i << " ";
    }
    return 0;
}
// 输出1 2 3 4 5 100 100 100 100 100 

1.2.3访问

  • 下标访问
vector<int> v1{1,2,3,4,5,6,7};
for (int i = 0; i < v1.size(); i++)
{
    cout << v1[i] << ' ';
}
  • 迭代器访问
vector<int> v1{1,2,3,4,5,6,7};
for (vector<int>::iterator it=v1.begin();it!=v1.end();it++)
{
     cout << *it << ' ';
}
return 0;
  • 范围for访问
vector<int> v1{1,2,3,4,5,6,7};
for (auto e : v1)
{
     cout << e << ' ';
}

1.2.4增删改查

  • 1.push_back和pop_back。通过push_back函数对容器进行尾插,pop_back函数对容器进行尾删。
int main() 
{  
    vector<int> v1;
    v1.push_back(1);     
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    
    v1.pop_back();
    v1.pop_back();
    v1.pop_back();
    v1.pop_back();
 
    return 0;
}
  • 2.insert和erase。通过insert函数可以在所给迭代器位置插入一个或多个元素,通过erase函数可以删除所给迭代器位置的元素,或删除所给迭代器区间内的所有元素(左闭右开)。
int main() 
{  
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    
    v1.insert(v1.begin(), 10);                //在容器开头插入10
    v1.insert(v1.begin(),4,10);               //在容器开头插入4个10
     
                                              //此时v1为;10 10 10 10 10 1 2 3 4
 
    v1.erase(v1.begin());                     //删除容器一个数
    v1.erase(v1.begin(), v1.begin() + 4);     //删除在该迭代器区间内的元素(左闭右开,也就是0-3)
 
                                              //此时v1为:1,2,3,4
    return 0;
}
  • 3.find函数
  • find函数共三个参数,前两个参数确定一个迭代器区间(左闭右开),第三个参数确定所要寻找的值。
  • find函数在所给迭代器区间寻找第一个匹配的元素,并返回它的迭代器,若未找到,则返回所给的第二个参数。
int main() 
{  
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    
    vector<int>::iterator pos = find(v1.begin(), v1.end(), 2); //查找2所在的位置
    v1.insert(pos, 10);                                        //在2的位置前插入10
 
    pos = find(v1.begin(), v1.end(), 10);                      //查找10所在的位置
    v1.erase(pos);                                             //删除10
 
 
    return 0;
}


我们会审查剪贴板内容,并对发布不合适内容的同学进行相应的处理