首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C/C++——vector的基本操作总结

C/C++——vector的基本操作总结

作者头像
felixzhao
发布于 2019-01-31 08:29:34
发布于 2019-01-31 08:29:34
7.3K00
代码可运行
举报
文章被收录于专栏:null的专栏null的专栏
运行总次数:0
代码可运行

标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结:

  • vector对象的定义和初始化
  • vector对象的基本操作,主要包括添加元素,遍历等

1、vector对象的定义和初始化

在vector中主要有四种定义和初始化的方法:

1.1、定义空的vector

定义的方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vector<T> v;

1.2、定义一个vector的副本

定义的方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vector<T> v1(v);

1.3、定义并初始化

定义的方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vector<T> v2(n, i);

定义了长度为n的vector v2,并且每个元素都是i。

1.4、定义并指定初始长度

定义的方法为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vector<T> v3(n)

采用的初始化方法为默认初始化。

1.5、例子

对于上述的四种定义方法如下图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    //第一种定义方法
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    //第二种定义方法
    vector<int> v1(v);
    //第三种定义方法
    vector<int> v2(10, 1);
    //第四种定义方法
    vector<int> v3(10);

    printf("first: ");
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");
    printf("second: ");
    for (vector<int>::size_type ix1 = 0; ix1 != v1.size(); ix1 ++){
            printf("%d\t", v1[ix1]);
    }
    printf("\n");
    printf("third: ");
    for (vector<int>::size_type ix2 = 0; ix2 != v2.size(); ix2 ++){
            printf("%d\t", v2[ix2]);
    }
    printf("\n");
    printf("forth: ");
    for (vector<int>::size_type ix3 = 0; ix3 != v3.size(); ix3 ++){
            printf("%d\t", v3[ix3]);
    }
    printf("\n");

    return 0;
}

注:上述代码是在C中使用vector。

2、vector中的基本操作

在vector中的基本操作包括插入,删除,遍历等。

2.1、插入操作

在vector中插入元素包括两种,一种是在尾部添加元素,使用的函数是push_back()函数,另一种是在指定位置插入元素,使用到的函数是insert()函数。

其中,insert()函数的具体形式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
insert(p, t)

指的是在迭代器p之前插入值为t的元素。具体应用如下面的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在开始插入10
    v.insert(v.begin(), 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在10和0之间添加11
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            if (*it == 0){
                    v.insert(it, 11);
                    break;
            }
    }
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    return 0;
}

2.2、删除操作

使用erase()方法删除指定的元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
erase(p)

删除迭代器p所指向的元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //在开始插入10,10,10
    v.insert(v.begin(), 3, 10);
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //删除第二个10
    int i = 0;
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++){
            i++ ;
            if (i == 2){
                    v.erase(it);
                    break;
            }
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

除此之外,还有clear()方法,清空vector中的所有元素,pop_back()方法,删除末尾的元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //删除末尾元素
    v.pop_back();

    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");


    return 0;
}

2.3、遍历

遍历通常有两种方式:

  • 通过下标
  • 利用迭代器

如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    for (int i = 0; i < 10; i++){
            v.push_back(i);
    }
    //利用下标      
    for (vector<int>::size_type ix = 0; ix != v.size(); ix ++){
            printf("%d\t", v[ix]);
    }
    printf("\n");

    //利用迭代器
    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it ++){
            printf("%d\t", *it);
    }
    printf("\n");


    return 0;
}

2.4、其他

在上面的操作中,还有一些操作,如:

  • size(),返回的是vector的大小
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年06月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 高可用之MMM
一、MMM简介 MMM即Multi-Master Replication Manager for MySQL:mysql多主复制管理器,基于perl实现,关于mysql主主复制 配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能 对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟ip,除此之外,它还有实现数 据备份、节点之间重新同步功能的脚本。MySQL本身没有提供replication failover的解决方案,通过MMM方案 能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,如果当前的主服务器挂 掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证 的数据的一致性。当主服务器挂掉以后,另一个主立即接管,其他的从服务器能自动切换,不用人工干预。 缺点:monitor节点是单点,不过这个你也可以结合keepalived或者haertbeat做成高可用;至少三个节点,对主机 的数量有要求,需要实现读写分离,还需要在前端编写读写分离程序。在读写非常繁忙的业务系统下表现不是很 稳定,可能会出现复制延时、切换失效等问题。MMM方案并不太适应于对数据安全性要求很高,并且读、写 繁忙的环境中。 适用场景: MMM的适用场景为数据库访问量大,并且能实现读写分离的场景。 Mmm主要功能 由下面三个脚本提供: mmm_mond 负责所有的监控工作的监控守护进程,决定节点的移除(mmm_mond进程定 时心跳检测,失败则将write ip浮动到另外一台master)等等 mmm_agentd 运行在mysql服务器上的代理守护进 程,通过简单远程服务集提供给监控节点 mmm_control 通过命令行管理mmm_mond进程 在整个监管过程中, 需要在mysql中添加相关授权用户,授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想 使用mmm的备份工具则还要添加一个mmm_tools用户。 二、开始部署 环境如下:
小手冰凉
2020/07/01
1.4K0
MySQL中MMM实现高可用群集
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的负载均衡。
星哥玩云
2022/08/16
6880
MySQL中MMM实现高可用群集
基于MMM搭建MySQL Replication集群高可用架构
MMM是Multi-Master Replication Manager for MySQL的缩写,它是MySQL提供的一个多主复制管理器,其核心是使用perl语言编写的一组脚本。实际上MMM是比较早期甚至有点老的一种用于构建高可用MySQL架构的方式,但因其还有一定的应用场景,所以本文将会演示一下如何搭建一个MMM架构。
端碗吹水
2020/09/23
7310
基于MMM搭建MySQL Replication集群高可用架构
MySQL高可用架构-MMM环境部署记录
MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个sla
洗尽了浮华
2018/01/22
2.5K0
MySQL高可用架构-MMM环境部署记录
使用MMM实现MySQL双主复制高可用
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,可以说是mysql主主复制管理器。虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。MMMM是关于MySQL主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入)。这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以可以用它在一组居于复制的服务器启动虚拟IP,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。
用户1148526
2019/05/25
1.6K0
MySQL-MMM架构部署深度分析
使用5台RHEL 6虚拟机,如图-2所示。其中192.168.4.10、192.168.4.11作为MySQL双主服务器,192.168.4.12、192.168.4.13作为主服务器的从服务器,192.168.4.100作为MySQL-MMM架构中管理监控服务器,实现监控MySQL主从服务器的工作状态及决定故障节点的移除或恢复工作,架构搭建完成后使用客户机192.168.4.120进行访问,客户机需要安装MySQL-client软件包。
星哥玩云
2022/08/17
5480
MySQL-MMM架构部署深度分析
003.MMM双主-双从读写分离部署
提示:所有主机添加对应的hostname和hosts,此步骤非必须,为方便之后简化配置,建议修改hosts。
木二
2019/07/01
9890
MYSQL-3m架构回顾
                Master-Master replication manager for Mysql
py3study
2020/01/08
1.1K0
MySQL高可用——MMM
MMM 即 Multi-Master Replication Manager for MySQL:mysql 多主复制管理器,基于 perl 实现,关于 mysql 主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM 也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟 ip,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。MySQL 本身没有提供 replication failover 的解决方案,通过 MMM 方案能实现服务器的故障转移,从而实现 mysql 的高可用。MMM 不仅能提供浮动 IP 的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,不用手工更改同步配置。这个方案是目前比较成熟的解决方案。
L宝宝聊IT
2018/09/29
1.5K0
MySQL高可用——MMM
MySQL/MariaDB基于MMM实现读写分离及高可用
前言 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。 MMM 优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。 缺点:Monitor节点是单点,可以结合Keepalived实现
小小科
2018/05/04
1.2K0
MySQL/MariaDB基于MMM实现读写分离及高可用
redis主从复制原理是同步还是异步_kubernetes高可用架构
在mysql5.4.1之前只存在这种复制模式,在mysql5.7前默认使用这种格式。
全栈程序员站长
2022/09/22
8350
redis主从复制原理是同步还是异步_kubernetes高可用架构
Microsoft Azure部署MYSQL-MMM(3)配置MYSQL-MMM
在db1、db2、db3安装MMM所需要的Perl模块(所有服务器)执行该脚本,然后 yum -y install mysql-mmm-agent来安装MMM :
李珣
2019/03/14
3570
Microsoft Azure部署MYSQL-MMM(2)配置主主复制
在db1(master1)、db2(master2)、db3(slave)上编译my.conf
李珣
2019/03/14
5640
Microsoft Azure部署MYSQL-MMM(2)配置主主复制
听说Mysql你很豪横?-------------搭建MySQL MHA实现数据库高可用( MySQL MHA概述、 搭建 MySQL MHA、 MySQL MHA 故障切换)
MHA目前在MySQL高可用方面是一个相对成熟的解决方案 但是在搭建的过程中会经常报错,且MHA的构建综合了主从复制,所以MHA的安装要思路清晰才可
不吃小白菜
2020/09/03
4.4K0
听说Mysql你很豪横?-------------搭建MySQL MHA实现数据库高可用( MySQL MHA概述、 搭建 MySQL MHA、 MySQL MHA 故障切换)
mysql实现高可用架构之MHA
  MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。   MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比较成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。
菲宇
2019/06/12
1.1K0
mysql实现高可用架构之MHA
mysql主从复制读写分离与高可用配置
前面我们说了mysql的安装配置(并提供一键安装脚本),mysql语句使用以及备份恢复mysql数据;本次要介绍的是mysql的主从复制,读写分离;及高可用MHA; 环境如下: master:CentOS7_x64 mysql5.721 172.16.3.175 db1 slave1:CentOS7_x64 mysql5.7.21 172.16.3.235 db2 slave2:CentOS7_x64 mysql5.7.21 172.16.3.235 db3 proxysql/MHA:CentOS7_x64 mysql5.7.21 172.16.3.235 proxysql
兔云小新LM
2019/07/22
7730
mysql主从复制读写分离与高可用配置
MHA高可用架构与Atlas读写分离
  MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在10~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
惨绿少年
2019/05/24
1.3K0
MySQL高可用方案MHA的部署和原理
MHA(Master High Availability)是一套相对成熟的MySQL高可用方案,能做到在0~30s内自动完成数据库的故障切换操作,在master服务器不宕机的情况下,基本能保证数据的一致性。
用户2038009
2021/03/08
6.1K1
【详解】MySQL双机双向热备份
在现代企业级应用中,数据的高可用性和灾难恢复能力是至关重要的。MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种备份和恢复机制来确保数据的安全性。本文将详细介绍如何实现MySQL的双机双向热备份,以提高系统的可用性和数据的安全性。
大盘鸡拌面
2025/07/21
950
MySQL 高可用——双主
生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有 一台MySQL服务器挂掉后,另外一台能立马接替其进行工作。 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC。 本节主要介绍了利用 keepalived 实现 MySQL 数据库的高可用。 Keepalived+mysql双主来实现MySQL-HA,我 们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系,通过Keepalived配置虚 拟IP,实现当其中的一台MySQL数据库宕机后,应用能够自动切换到另外一台MySQL数据库,保证系统的高可 用。 一、配置两台MySQL主主同步 该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改 变。MySQL将事务写入二进制日志。在事件写入二进制日志完成后,master通知存储引擎提交事务。 下一步就 是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程 在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日 志中读取事件,如果已经同步了master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日 志。 SQL slave thread(SQL从线程)处理该过程的后一步。SQL线程从中继日志读取事件,并重放其中的事 件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS 的缓存中,所以中继日志的开销很小。 主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同 步。 若mysql主机开启了防火墙,需要关闭防火墙或创建规则。 master1有关复制的配置如下:
小手冰凉
2020/06/22
2.2K0
推荐阅读
相关推荐
MySQL 高可用之MMM
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验