当前位置: 首页 > news >正文

STL_vector_01_基本用法

  • 👋 Hi, I’m liubo
  • 👀 I’m interested in harmony
  • 🌱 I’m currently learning harmony
  • 💞️ I’m looking to collaborate on …
  • 📫 How to reach me …
  • 📇 sssssdsdsdsdsdsdasd
  • 🎃 dsdsdsdsdsddfsgdgasd
  • 🍺 jyukyuiyuiyuigkasd
  • 🍥 fsdfgdsgsdgdgadsa
  • ✨ xcvxcvxcvxcvdasdaasd
  • 🍰 dazdsxasxsaxsaasdsa
  • 🚨 gdfgdshdfhfhygjtyu

vector模板是STL(Standard Template Library,标准模板库)中的一个容器类,使用方法类似数组。

使用时包含头文件:

#include<vector>

一、vector的构造函数

函数原型:

vector<T> v ; //使用模板类,默认构造函数
vextor<T> v(n,elem); //将n个elem拷贝给本身
vector<T> v(const vector &v) ; //拷贝构造函数
vector<T> v(v.begin(),v.end()); //将[v.begin(),v.end())区间中的元素拷贝给本身,注意左闭右开

使用示例:

#include <stdio.h>   // C语言的标准库,包含C语言流操作 printf等
#include <string.h>  // C语言的标准库,包含字符串处理操作 strcpy等
#include <unistd.h>  // pause()头文件
#include <iostream>  // 包含输入和输出操作

#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

// vector的遍历
void printVector(vector<int>& v)
{	//利用迭代器打印 v
	for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
}

int main()
{
    printf("--------------------begain-------------------\n");

    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    vector<int> first;                                 // 创建一个值类型为int的空vector
    vector<int> second(10);                            // 创建一个10个int的vector,且每个元素初值为0
    vector<int> third(10, 1);                          // 创建一个10个int的vector,且每个元素初值为1
    vector<int> forth(third);                          // third temp 拷贝给vector forth ,两者元素值完全相同
    vector<int> fifth(a, a + 10);                      // 从数组区间[a[0], a[10])中获得初值,注意左闭右开,a[10]无意义这里助于理解
    vector<int> sixth(fifth.begin(), fifth.end() - 5); // temp [temp.begin(),temp.end()-5)区间的元素赋给fifth,注意左闭右开
    vector<int> seventh = { -1, 0, 3, 5, 7, 9};        // 列表初始化

    cout << "first: ";
    printVector(first);

    cout << "second: ";
    printVector(second);

    cout << "third: ";
    printVector(third);

    cout << "forth: ";
    printVector(forth);

    cout << "fifth: ";
    printVector(fifth);

    cout << "sixth: ";
    printVector(sixth);
    
    cout << "seventh: ";
    printVector(seventh);

    printf("--------------------end----------------------\n");
    // cin.get();
    // getchar();
    // pause();
    return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
first: 
second: 0 0 0 0 0 0 0 0 0 0 
third: 1 1 1 1 1 1 1 1 1 1 
forth: 1 1 1 1 1 1 1 1 1 1 
fifth: 0 1 2 3 4 5 6 7 8 9 
sixth: 0 1 2 3 4 
seventh: -1 0 3 5 7 9 
--------------------end----------------------

二、vector的遍历

方法1:

void printVector(vector<int>& v)
{
	for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
}

迭代器iterator中的begin和end函数是左闭右开的区间。

方法2:

void printVector(vector<int> &v)
{ 
    for (auto n : v)
    {
        cout << n << " ";
    }
    cout << endl;
}

三、vector的赋值操作

函数原型:

vector& operator=(const vector &v); //重载赋值运算符
assign(v.begin(),v.end());          //将[v.begin(),v.end())区间中的元素赋值给本身
assign(n,elem);                     //将n个elem赋值给本身

int myints[];
third.assign (myints,myints+3);   // assigning from array.

assign: 将新内容赋给vector,替换其当前内容,并相应地修改其大小。

使用示例:

#include <stdio.h>   // C语言的标准库,包含C语言流操作 printf等
#include <iostream>  // 包含输入和输出操作
#include <string.h>  // C语言的标准库,包含字符串处理操作 strcpy等
#include <unistd.h>  // pause()头文件
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

// vector的遍历
void printVector(vector<int> &v)
{
    for (auto n : v)
    {
        cout << n << " ";
    }
    cout << endl;
}

int main()
{
    printf("--------------------begain-------------------\n");
    vector<int> first = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    cout << "first: ";
    printVector(first);

    //操作符 = 赋值
    vector<int> second;
    second = first;
    cout << "second: ";
    printVector(second);

    // assign 函数赋值,使用迭代器
    vector<int> third(10, 1);
    cout << "third1: ";
    printVector(third);

    third.assign(first.begin(), first.end() - 5); // 把first除后五个值之外值赋给third,其余值删除,左闭右开
    cout << "third2: ";
    printVector(third);

    // assign 函数赋值,使用数值
    vector<int> forth(10, 1);
    cout << "forth1: ";
    printVector(forth);

    forth.assign(5, 9); // 把5个9赋给 forth,其余值删除
    cout << "forth2: ";
    printVector(forth);

    // assign 函数赋值,使用数组
    vector<int> fifth(10, 1);
    cout << "fifth1: ";
    printVector(fifth);

    int myints[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    fifth.assign(myints, myints + 5); //把 myints 前五个值赋给fifth,fifth左闭右开
    cout << "fifth2: ";
    printVector(fifth);

    printf("--------------------end----------------------\n");
    // cin.get();
    // getchar();
    // pause();
    return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
first: 0 1 2 3 4 5 6 7 8 9 
second: 0 1 2 3 4 5 6 7 8 9 
third1: 1 1 1 1 1 1 1 1 1 1 
third2: 0 1 2 3 4 
forth1: 1 1 1 1 1 1 1 1 1 1 
forth2: 9 9 9 9 9 
fifth1: 1 1 1 1 1 1 1 1 1 1 
fifth2: 0 1 2 3 4 
--------------------end----------------------

四、vector的元素访问

函数原型:

at(int idx);    //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
operator[idx];  //返回索引idx所指的数据,如果idx越界,运行直接报错
front();        //返回容器中第一个数据元素
back();         //返回容器中最后一个数据元素

使用示例:

#include <stdio.h>   // C语言的标准库,包含C语言流操作 printf等
#include <iostream>  // 包含输入和输出操作
#include <string.h>  // C语言的标准库,包含字符串处理操作 strcpy等
#include <unistd.h>  // pause()头文件
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main()
{
    printf("--------------------begain-------------------\n");
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    vector<int> v_test(a, a + 10);

    cout << "调用at,打印 v_test: ";
    for (int i = 0; i < v_test.size(); i++)
    {
        cout << v_test.at(i) << " ";
    }
    cout << endl;

    cout << "调用[],打印 v_test: ";
    for (int i = 0; i < v_test.size(); ++i)
    {
        cout << v_test[i] << " "; // 调用2
    }
    cout << endl;

    cout << "容器中第一个元素是:" << v_test.front() << endl;
    cout << "容器中最后一个元素是:" << v_test.back() << endl;

    printf("--------------------end----------------------\n");
    // cin.get();
    // getchar();
    // pause();
    return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
调用at,打印 v_test: 0 1 2 3 4 5 6 7 8 9 
调用[],打印 v_test: 0 1 2 3 4 5 6 7 8 9 
容器中第一个元素是:0
容器中最后一个元素是:9
--------------------end----------------------

五、vector的元素插入

函数原型:

push_back(ele); //尾部插入元素ele
insert(const_iterator pos,ele); //在迭代器指向的位置pos处插入一个元素ele
insert(const_iterator pos,int count,ele); //在迭代器指向的位置pos处插入count个元素ele

push_back: 在vector当前最后一个元素的末尾添加一个新元素。val的内容被复制(或移动)到新元素中。

将容器大小增加了1,当且仅当新vector大小 > 当前vector容量时,会自动重新分配存储空间。

使用示例:

using std::cin;
using std::cout;
using std::endl;
using std::vector;

// vector的遍历
void printVector(vector<int> &v)
{
    for (auto n : v)
    {
        cout << n << " ";
    }
    cout << endl;
}

int main()
{
    printf("--------------------begain-------------------\n");
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    vector<int> v_test(a, a + 10);

    for (int i = 0; i < 3; ++i)
    {
        v_test.push_back(10);//尾部插入3个10
    }
    cout << "在尾部插入3个10,打印 v_test: ";
    printVector(v_test);

    v_test.insert(v_test.begin(), 10); //在首位插入10
    cout << "在第首位插入10,打印 v_test: ";
    printVector(v_test);

    v_test.insert(v_test.begin(), 2, 20);//在首位插入2个20
    cout << "在首位插入2个20,打印 v_test: ";
    printVector(v_test);

    v_test.insert(v_test.begin() + 3,30); //在第3位后面插入30
    cout << "在第3位后面插入30,打印 v_test: ";
    printVector(v_test);

    v_test.insert(v_test.begin() + 4, 2, 40); //在第4位后面插入2个40
    cout << "在第4位后面插入2个40,打印 v_test: ";
    printVector(v_test);

    v_test.insert(v_test.end() - 3, 2, 50);//在倒数第3位前面插入2个50
    cout << "在倒数第3位前面插入2个50,打印 v_test: ";
    printVector(v_test);

    printf("--------------------end----------------------\n");
    // cin.get();
    // getchar();
    // pause();
    return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
在尾部插入3个10,打印 v_test: 0 1 2 3 4 5 6 7 8 9 10 10 10 
在第首位插入10,打印 v_test: 10 0 1 2 3 4 5 6 7 8 9 10 10 10 
在首位插入2个20,打印 v_test: 20 20 10 0 1 2 3 4 5 6 7 8 9 10 10 10 
在第3位后面插入30,打印 v_test: 20 20 10 30 0 1 2 3 4 5 6 7 8 9 10 10 10 
在第4位后面插入2个40,打印 v_test: 20 20 10 30 40 40 0 1 2 3 4 5 6 7 8 9 10 10 10 
在倒数第3位前面插入2个50,打印 v_test: 20 20 10 30 40 40 0 1 2 3 4 5 6 7 8 9 50 50 10 10 10 
--------------------end----------------------

六、vector的元素删除

函数原型:

pop_back(); //删除最后一个元素
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator begin,const_iterator end); //删除迭代器从begin到end之间的元素
clear(); //删除容器中所有元素

使用示例:

#include <stdio.h>   // C语言的标准库,包含C语言流操作 printf等
#include <iostream>  // 包含输入和输出操作
#include <string.h>  // C语言的标准库,包含字符串处理操作 strcpy等
#include <unistd.h>  // pause()头文件
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

// vector的遍历
void printVector(vector<int> &v)
{
    for (auto n : v)
    {
        cout << n << " ";
    }
    cout << endl;
}

int main()
{
    printf("--------------------begain-------------------\n");
    vector<int> v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    // 使用 pop_back 删除最后一个元素
    v_test.pop_back();
    cout << "使用 pop_back 删除最后一个元素后,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除首个元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.begin());
    cout << "使用 erase 删除首个元素,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除第二个元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.begin() + 1);
    cout << "使用 erase 删除第二个元素,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除全部元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.begin(), v_test.end());
    cout << "使用 erase 删除全部元素,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除前三个元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.begin(), v_test.begin() + 3);
    cout << "使用 erase 删除前三个元素,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除后三个元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.end() - 3, v_test.end());
    cout << "使用 erase 删除后三个元素,打印v_test: ";
    printVector(v_test);

    // 使用 erase 删除前三个后三个之外的元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.erase(v_test.begin() + 3, v_test.end() - 3);
    cout << "使用 erase 删除前三个后三个之外的元素,打印v_test: ";
    printVector(v_test);

    // 使用 clear 删除全部元素
    v_test = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    v_test.clear(); // 调用7,清空所有元素
    cout << "使用 clear 删除全部元素,打印v_test: ";
    printVector(v_test);

    printf("--------------------end----------------------\n");
    // cin.get();
    // getchar();
    // pause();
    return EXIT_SUCCESS;
}

测试结果:

--------------------begain-------------------
使用 pop_back 删除最后一个元素后,打印v_test: 0 1 2 3 4 5 6 7 8 
使用 erase 删除首个元素,打印v_test: 1 2 3 4 5 6 7 8 9 
使用 erase 删除第二个元素,打印v_test: 0 2 3 4 5 6 7 8 9 
使用 erase 删除全部元素,打印v_test: 
使用 erase 删除前三个元素,打印v_test: 3 4 5 6 7 8 9 
使用 erase 删除后三个元素,打印v_test: 0 1 2 3 4 5 6 
使用 erase 删除前三个后三个之外的元素,打印v_test: 0 1 2 7 8 9 
使用 clear 删除全部元素,打印v_test: 
--------------------end----------------------

七、总结

以上就是今天要讲的内容,后续会有更多内容。

八、参考资料

版权声明:本文参考了其他资料和CSDN博主的文章,遵循CC 4.0 BY-SA版权协议,现附上原文出处链接及本声明。

  1. https://blog.csdn.net/qq_52324409/article/details/121000029




















相关文章:

  • OpenCV--图像轮廓检测
  • 状态空间建模与极点配置 —— 理论、案例与交互式 GUI 实现
  • JDY-24M模块基本使用说明(主从透传、MESH组网、BLE等数据传输)
  • 【棒垒球规则】全国幼儿软式棒垒球比赛规则(三)·棒球1号位
  • 2025最新系统 Git 教程(二)
  • 无人机装调与测试
  • 考研单词笔记 2025.04.07
  • DP问题常见模型
  • 深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学
  • 5-树与二叉树
  • MySQL 数据库操作指南:从数据库创建到数据操作
  • dotnet 编译模式使用教程
  • AR 赋能儿童娱乐:剧本杀与寻宝小程序搭建秘籍​
  • PyTorch使用(6)-张量形状操作
  • Linux笔记之Ubuntu系统设置自动登录tty1界面
  • 七种驱动器综合对比——《器件手册--驱动器》
  • 14-Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析(二分类))
  • Mysql是怎么存储数据的
  • 从代码学习深度学习 - 序列到序列学习数据预处理 PyTorch 版
  • Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案
  • 国家统计局督察组:江苏有关地区仍存在干预数据上报等问题
  • 出生于1991年,石秀清拟提名为铜陵市辖县(区)政府副县(区)长人选
  • 印尼总统20年来首次访泰:建立战略伙伴关系,加强打击网络诈骗等合作
  • 专访《风雪夜归人》导演闫锐:在舞台上表现什么是真正的活着
  • 上海中心城区首条“定制化低空观光航线”启航,可提前一天提需求
  • 夜读丨为萤火虫哭泣的夜晚