一、vector类型简介

标准库:集合或动态数组,我们可以放若干对象放在里面。

vector他能把其他对象装进来,也被称为容器

#include <iostream>
#include <vector>
using namespace std; struct student{int num;}; int main()
{
vector<int> vjihe; // 表示这个集合对象保存的是int型数据
// <int>:模板,vector本身就是个类模板,<int>实际上就是类模板的实例化过程。
vector<student> vstudlist;// 存放学生类型的集合
vector<vector<string>> strchuan; // 相当于二维的字符串。
vector<int *> vjihe2;
// 不能向集合中装引用
//vector<int &> vjihe3; // 引用知识一个别名,不是对象。
return ;
}

二、定义和初始化vector对象

(1)空的vector

vector<string> mystr; // 创建一个string类型的空的集合
//push_back()
mystr.push_back(“abc”);
mystr.push_back(“efg”);

(2)元素拷贝的初始化方式

vector<string> mystr2(mystr); // 将mystr元素拷贝给mystr2
vector<string> mystr3 = mystr; // 将mystr元素拷贝给mystr3

(3)C++11标准中,用列表初始化方法给值,用{}括起来

vector<string> mystr4 = {“aaa”,”bbb”,”ccc”};

(4)创建指定数量的元素

// 创建15个int类型的元素,每个元素的值为-200
vector<int> ijihe(,-);
// 创建15个int类型的元素,每个元素的值为hello
vector<string> sjihe(,”hello”); vector<int> ijihe2(); // 15个元素,每一个元素值默认为0
vector<string> sjihe(); // 15个元素,每一个元素值默认为空

(5)多种初始化方式,()一般表示元素数量,{}一般表示元素内容这个概念,但不绝对。

想要正常的通过{}初始化,那么{}里面值的类型,必须要跟vector后面这个<>里面的元素类型相同。

vector<int> i1(); // 表示创建10个元素,每个元素值为0
vector<int> i2{}; // 表示创建一个元素,该元素的值为10
vector<string> snor{“hello”}; // 创建一个元素,元素内容为hello
vector<string> s22{}; // 10个元素,每个元素为空
vector<string> s23{,,”hello”}; // 10个元素,每一个元素内容为hello
vector<int> i3(,);//10个元素,每个元素值为1
vector<int> i4{,}; // 2个元素
//vector<int> i4{“hello”}; // 语法错误

三、vector对象上的操作

最常用的是不知道vector里面有多少个元素,需要动态的增加/减少。

一般情况下,先创建空的vector对象。

(1)判断是否为空empty(),返回布尔值

vector<int> ivec;
if(ivec.empty())
{
cout << “ivec为空” << endl;
}

(2)push_back():用于向vector中的末尾添加一个元素

ivec.push_back();
ivec.push_back();
for(int i = ; i <= ; i++)
{
ivec.push_back(i);
}

(3)size():返回元素个数

cout << ivec.size() << endl;

(4)clear():移除所有元素,将容器清空

//ivec.clear();
//cout << ivec.size() << endl;

(5)ivec[n]:返回ivec中第n个元素(n是个整型值),位置从0开始,必须小于.size(),如果引用的下标超过这个范围,或者用[]访问了一个孔的vector,那么就会产生不可预测的结果,编译器发现不了。

cout << ivec[] << endl; // [0]:1 ,[1]:2

(6)= 赋值

vector<int> ivec2;
ivec2.push_back();
ivec2 = ivec; // ivec2得到了100个元素,ivec2原来的元素消失。
ivec2 = {,,,}; // 用{}的值取代了ivec2中原来的值
cout << ivec2.size() << endl;

(7)==,!= 相等,不相等

两个vector相等,元素数量相等,对应位置元素值也一样,否则就是不相等

int ivec3 = ivec2;
if(ivec3 == ivec2)
{
cout << “ivec3 == ivec2” << endl;
} ivec3.push_back();
if(ivec3 != ivec2)
{
cout << “ivec3 != ivec2” << endl;
} ivec3.clear();
ivec2.clear();
if(ivec3 == ivec2)
{
cout << “ivec3 == ivec2” << endl;
}

(8)范围for的应用

vector<int> vecvalue{,,,,};
for(auto &vecitem : vecvalue) // 引用起到修改变量的作用
{
vecitem *= ;
} for(auto vecitem : vecvalue)
{
cout << vecitem << endl; // 2,4,6,8,10
}

(8)范围for的进一步理解

for(auto vecitem : vecvalue)
{
//vecvalue.push_back(888); // 导致输出彻底乱套
cout << vecitem << endl;
}

在for语句中遍历一个容器等等类似操作,千万不要改动vector容器的容量,增加/删除都不可以,否则会出问题。

vector类型介绍的更多相关文章

  1. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  2. Java 集合系列 05 Vector详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. C++ vector类型要点总结

    概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...

  4. C++ vector类型要点总结(以及各种algorithm算法函数)

    概述 C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现. 容器向量也是一个类模板.vector是C++标准模 ...

  5. c++ 头文件 及 sort 和 vector简单介绍

    c++  sort :http://www.16kan.com/post/997260.html http://wenku.baidu.com/view/e064166daf1ffc4ffe47ac6 ...

  6. 【原创】【长期更新】【未完待续】自制vector类型

    继<自制string类型>以来的第二篇自制类型的文章.马上要开学了,时间也不多了,争取在今年写完吧. 目录 一,vector类型简单介绍 1.简介 1.1.STL 1.2.vector 2 ...

  7. HTTP协议的8种请求类型介绍

    HTTP协议的8种请求类型介绍 转自:http://www.cnblogs.com/liangxiaofeng/p/5798607.html HTTP协议的8种请求类型介绍 HTTP协议中共定义了八种 ...

  8. Linux文件类型介绍

    文件类型介绍: Linux系统不同于Windows系统,两者文件类型和文件扩展名也有很大的差异.Linux中的文件类型和Linux文件的文件扩展名所代表的意义和Windows系统完全不同.用户一般通过 ...

  9. Solidity教程系列1 - 类型介绍

    现在的Solidity中文文档,要么翻译的太烂,要么太旧,决定重新翻译下,再加上代码事例讲解. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果 ...

随机推荐

  1. Rigidbody中 Angular Drag (角阻力):

    Rigidbody中 Angular Drag  (角阻力):同样指的是空气阻力,只不过是用来阻碍物体旋转的.如果设置成无限的话,物体会立即停止旋转.如果设置成0,物体在上升过程中,会发生侧翻旋转. ...

  2. 37-python中bs4获取的标签中如何提取子标签

    如果只是要提取一个标签 里面的属性值啥的,直接看这篇文章就可以了: 23-python用BeautifulSoup用抓取a标签内所有数据 如果是标签的嵌套,可以参考下面的思路,虽然不是很简洁,但是可以 ...

  3. 电脑清缓存(C盘占空间)

    电脑缓存目录: 1.取消文件隐藏 2.找到C:\Users\lwx351192\AppData\Local\Temp目录下的三个子文件夹local,locallow,roaming里面的文件都可删除, ...

  4. [Selenium]点击下拉框之后,从下拉列表选择元素进行点击很容易失败

    点击下拉框之后,下拉列表会显示出来,但是有时候下拉列表会很快就消失掉,导致后面选择元素的时候会失败. 像这种情况,需要将鼠标移动到下拉列表上,使下拉列表维持显示,然后才选择元素进行点击. 将鼠标移动到 ...

  5. 我大中华微软MVP中国区人才库(转)

    出处:http://www.genshuixue.com/i-cxy/p/15349735 刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的asp.net从业经验,微软MSDN特约讲师 ...

  6. [GO]go使用etcd

    package main import ( "go.etcd.io/etcd/clientv3" //笔者在使用clientv3的时间曾经使用过github.com/coreos/ ...

  7. (简单的物理题)Bungee Jumping

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1155 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  8. rzdatetimepicker

    两项选为True时可显示今天和圆圈 此属性可使右边按钮下平滑 注意Format中的表示月份的MM一定要大写,不然修改时和分钟会联动.

  9. delphi 拆分字符串

    最近在使用Delphi开发一种应用系统的集成开发环境.其中需要实现一个字符串拆分功能,方法基本原型应该是:procedure SplitString(src: string ; ch: Char; v ...

  10. Centos 下部署tomcat多实例

    基础环境及JDK就不多说了,下面的目录结构以如下为准: 根目录-apps 根目录-apps--tomcat 根目录-apps--ins1 根目录-apps--ins2 ================ ...