一、简介

vector是定义在C++标准模板库。vector可以理解为是一个能够存放任意类型的动态数组,能够增加和删除元素,但是一个容器中的对象必须是同一种类型。

和数组的相似点:

1、vector为它们的元素使用连续的存储位置,也就意味着可以通过指针的偏移量来进行访问某一个元素。

2、与其他动态序列容器(队列、链表)相比,向量访问其元素(就像数组一样)非常高效,并且从末尾添加或删除元素的效率相对较高。但对于涉及在末尾以外的位置插入或删除元素的操作,vector的性能相对较差

不同点:

1、由于vector能够自动的管理内存,我们不需要考虑内存的增长和释放、具有很好的安全性。

注意:vector实际所占空间并不一定等于存储有效元素的空间。因为重新分配空间需要一定的时间,考虑到运行效率,设计人员并不是在每次添加或者删除元素都重新分配,而是会分配一些额外的存储空间以适应可能的增长。

二、声明和初始化

声明:

#include<vector>
using std::vector;

 初始化

vector<T>    v1;                vevtor保存类型为T的对象。默认构造函数v1为空。
vector<T>    v2(v1);            v2是v1的一个副本,v1和v2的元素类型必须相同
vector<T>    v3(n,i);           v3包含n个值为i的元素
vector<T>    v4(n);             v4包含初始化的元素的n个副本,默认元素值为0

案例1:

#include <vector>
#include <iostream>

int main() {
    // 创建一个空的 vector
    std::vector<int> myVector;

    // 创建一个带有初始值的 vector
    std::vector<int> myVector2 = {1, 2, 3, 4, 5};

    // 创建一个包含 n 个元素,每个元素都初始化为特定值的 vector
    std::vector<int> myVector3(5, 10); // 5 个元素,每个元素的值都是 10

    return 0;
}

三 、vector遍历

1.迭代器遍历

for(vector<int>::iterator it=obj.begin();it !=obj.end();it++)

{
    cout<<*it<<",";

}

2.C++11 新增关键字auto

for(auto it=obj.begin();it!=obj.end();it++)
{
    cout<<*it<<",";
}

3.数组遍历

for(int i=0;i<obj.size();i++)
{
    cout<<iter<<",";
}

4.基于范围的for循环

for(auto iter:obj)
{
    cout<<iter<<",";
}

案例2:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    // 获取 vector 的大小
    std::cout << "Size of vector: " << myVector.size() << std::endl;

    // 使用循环遍历 vector
    for (int i = 0; i < myVector.size(); ++i) {
        std::cout << myVector[i] << " ";
    }
    std::cout << std::endl;

    // 使用范围循环遍历 vector(C++11)
    for (const auto& element : myVector) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    return 0;
}

四、添加、删除和索引元素

push_back(value); //在最后面添加一个元素
pop_back(value); //将最后面的元素删除,不会返回元素的值
 
value[n]; //下标访问法,0~n~size-1
value.at[n]; //下标访问法,0~n~size-1,使用at访问更加安全一些,因为at访问的时候将在运行期间检查非法的索引,这种检查的代价是运行时间更长
value.front(); //返回最前面的一个元素
value.back(); //返回最后面的一个元素

案例3:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> myVector = {1, 2, 3, 4, 5};

    // 在尾部插入元素
    myVector.push_back(6);

    // 在尾部删除元素
    myVector.pop_back();

    // 在指定位置插入元素
    myVector.insert(myVector.begin() + 2, 10);

    // 在指定位置删除元素
    myVector.erase(myVector.begin() + 1);

    return 0;
}

四、其他常用操作

v.empty();    //如果v为空,则返回true,否则返回false
v.size();     //返回v中元素的个数 

v.swap(v1) //交换容器

v.sort() //排序容器

案例4:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> myVector = {3, 1, 4, 1, 5, 9, 2, 6};

    // 对容器中的元素进行排序(默认升序)
    std::sort(myVector.begin(), myVector.end());

    // 输出排序后的容器内容
    for (const auto& element : myVector) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    return 0;
}

 参考链接:

c++ vector数据类型-CSDN博客

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐