C++(8.5)--Vector容器

向量容器Vector

  • 1. 定义/初始化
  • 2. 遍历
  • 3. 常用操作
    • vector 迭代器遍历,sort, reverse,

1. 定义/初始化

vector是同一类型对象的集合,被称作容器。vector实际是一个类模版,可用于保存多种数据类型的数据(确定类型的vector 就只能装同种数据)。模版类决定了vector 声明时需要提供的信息。⚠️Vector 不是一种数据类型,但是vector<int>\text{vector<int>}vector<int>vector<string>\text{vector<string>}vector<string>,… 都是数据类型。

Vector Vs 数组:

  1. 动态数组,可以在运行阶段设置长度
  2. 具有数组的快速索引方式
  3. 可以插入和删除元素

定义和初始化- -尖角号:范型编程

# include <vector>
using std::vector
vector<T> v1;        // vector 保存了类型为T的对象, 默认构造函数,v1 为空
vector<T> v2(v1);    // v2 是 v1 的一个副本, 拷贝构造函数?两个是一个地址?
vector<T> v3(n, i);  // v3 包含n个为i 的元素
vector<T> v4(v);     // v4 含有值初始化的元素的n个元素,具体初始化值由T的默认构造函数决定vector <double> vec1;  
vector <string> vec2(5); //分配5个空间, 使用默认值初始化
vector <int> vec3(5,998); //分配5个空间,使用998初始化
vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};  // 创建的同时指定初始值以及元素个数

2. 遍历

vector<int> cards(54, 0);// way1--C 语言的习惯: 传统for 循环
for(int i = 0; i < cards.size(); i++){cout << cards[i] << "\t";
}
cout << "\n" << endl;// way2--C++语言习惯,迭代器的写法
for(vector<int>::const_iterator iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << ", ";
}
cout << endl; */// way3--C++11 之后:迭代器的简写版本,类型推断
for(auto iter = cards.begin(); iter != cards.end(); iter++){cout << *iter << "。 ";}cout << endl;// way4--区间遍历
for(auto card : cards){cout << card << ":" << getColor(card) << "-" << getValue(card) << "\t";
}
cout << endl;// 使用算法的方式,将容器的内容复制到cout 绑定的迭代器中
// #include <iterator>
//    copy(cards.cbegin(), cards.cend(), ostream_iterator<int>(cout, "- "));
//    cout << endl;

3. 常用操作

vector常有的操作:

常用操作
clear()移除容器中的所有数据
empty()判断容器是否为空
size()返回容器中元素的个数
[index],at(index)返回索引为index的元素
erase(pos)删除pos 位置处的数据
erase(beg, end)删除[beg, end) 区间的数据
front()返回第一个元素
insert(pos, elem)在pos位置插入一个元素
pop_back()删除最后一个元素
push_back(elem)在容器的末尾插入一个元素
resize(num)重新设置一个容器的大小
begin(),end()返回容器首尾元素的迭代器

新增两个头文件

#include <vector>
#include <algorithm>

vector 迭代器遍历,sort, reverse,

int main(){// vector <double> vectDouble = {98.5, 67.9, 43.6, 32.9};  c++ 98 中不能初始化并赋初值vector <double> vectDouble;// 向数组中插入数字vectDouble.push_back(100.8);vectDouble.push_back(99.8);vectDouble.push_back(102.5);// 不专业输出for(int i = 0; i < vectDouble.size(); i++){cout << vectDouble[i] << "\t";}// 集合的通用遍历方法,使用迭代器 iteratorvector<double>::iterator it;  //定义一个vector<double>类型的迭代器, 实际上是一个指针for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}// 排序sort(vectDouble.begin(), vectDouble.end());for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}//逆序reverse(vectDouble.begin(), vectDouble.end());for(it = vectDouble.begin(); it != vectDouble.end(); it++){cout << *it << "\t";}return 0;
}

定义多大多大,push_back会/可以改变容量,但是效率不高。
当内存容量不够的时候的应对机制:申请一块更大的存储区,将所有的元素放入到新的存储区中。将旧的内存释放掉。
建议vector中不要放复杂对象,要放指针。(这么处理的妙处??

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于mysql的change和modify

前端时间要写个游戏里的邮件系统&#xff0c;定义了一个如下的表结构&#xff1a; CREATE TABLE sysmail (mailid int(20) NOT NULL AUTO_INCREMENT,sendtime int(11) NOT NULL DEFAULT 0,mailtitle varchar(512) COLLATE utf8_bin NOT NULL DEFAULT ,mailcontext varchar(2048…

终于,我读懂了所有Java集合——map篇

首先&#xff0c;红黑树细节暂时撸不出来&#xff0c;所以没写&#xff0c;承诺年前一定写 HashMap &#xff08;底层是数组链表/红黑树&#xff0c;无序键值对集合&#xff0c;非线程安全&#xff09; 基于哈希表实现&#xff0c;链地址法。 loadFactor默认为0.75&#xff0…

valgrind工具使用详解

zz自 http://blog.csdn.net/destina/article/details/6198443 感谢作者的分享&#xff01; 一 valgrind是什么&#xff1f; Valgrind是一套Linux下&#xff0c;开放源代码&#xff08;GPL V2&#xff09;的仿真调试工具的集合。Valgrind由内核&#xff08;core&#xff09;以…

C++(9)--裸指针、智能指针、引用

指针1.裸指针的基本概念1.1 裸指针的声明*/初始化&1.2 操作裸指针--间接运算符*1.3 裸指针使用 demo--指向一个简单变量1.4 空指针--nullptr1.5 特殊指针--void *ptr2.指针和引用--引用定义&3.指针和数组3.1 数组指针的定义3.2 数组指针递增/递减操作3.3 指针与数组使用…

关于valgrind的安装和内存泄露分析

程序的安装 如果使用的是tar包安装. valgrind # wget http://valgrind.org/downloads/valgrind-3.9.0.tar.bz2 # tar -jxvf valgrind-3.9.0.tar.bz2 # cd valgrind-3.9.0 # ./autogen.sh # ./configure # make; make install 使用命令: valgrind --tool=memcheck --leak-…

关于mysql的cpu占用高的问题

现在游戏开了泰服 ,发现泰服的cpu占用率总是比繁体或者大陆的高很多,每次都是占用了300%多 top - 15:34:06 up 222 days, 2:51, 2 users, load average: 0.75, 0.73, 0.66 Tasks: 215 total, 1 running, 214 sleeping, 0 stopped, 0 zombie Cpu(s): 52.4%us, 8.5%…

网络原理知识点汇总

OSI七层模型 vs. TCP/IP 五层模型&#xff08;有时候也说四层&#xff09;及各层协议 七层&#xff1a;物理层&#xff1a;为数据端设备提供传送数据的通路&#xff0c; IEEE802 数据链路层&#xff1a;提供介质访问和链路管理&#xff0c; ARP&#xff0c;MTU 网络层&#xf…

无限踩坑系列(8)--猿界神猿

计算机一句话冷知识1.GNU2. Unix与C语言3. Linux与git-hub4. c/c 编译器5. python1.GNU GNU是一个自由的操作系统&#xff0c;其内容软件完全以GPL方式发布。 GNU&#xff1a;GNU’s Not Unix!的递归缩写 Unix 商业化之后&#xff0c; RMS发起了GNU计划&#xff0c;在该计划下…

C++实现md5加密或计算文件的唯一性识别

由于网络上传了很多关于C实现md5加密的类&#xff0c;至于那个是原创&#xff0c;我不敢妄加猜测&#xff0c;只是这里我声明我是转载的&#xff0c;并支持原创。 对于md5加密算法&#xff0c;我提供两文件&#xff1a; #ifndef MD5_H #define MD5_H #include <string>…

Crontab的格式

第1列分钟1&#xff5e;59 第2列小时1&#xff5e;23&#xff08;0表示子夜&#xff09; 第3列日1&#xff5e;31 第4列月1&#xff5e;12 第5列星期0&#xff5e;6&#xff08;0表示星期天&#xff09; 第6列要运行的命令 下面是crontab的格式&#xff1a; 分 时 日 月 星期 要…

leetcode516 最长回文子序列

给定一个字符串s&#xff0c;找到其中最长的回文子序列。可以假设s的最大长度为1000。 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 "bbbb"。 示例 2: 输入: "cbbd" 输出: 2 一个可能的最长回文子序列为 "bb"。 …

C++(10)--动态分配内存new,程序的内存分配

动态分配内存1. 动态分配内存1.1使用new分配内存1.2使用delete释放内存1.3使用new创建动态分配的数组2. 程序的内存分配3.数组与指针案例实践4.二维数组与指针《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------…

社交app应用开发 客户端+服务器源码

原帖地址&#xff1a;http://www.devdiv.com/iOS_iPhone-想学习移动社交APP的童鞋有福了&#xff0c;图文展示&#xff0c;附客户端&#xff0c;服务端源码。-thread-121444-1-1.html 想学习移动社交APP的童鞋有福了&#xff0c;图文展示&#xff0c;附客户端&#xff0c;服务…

leetcode83 删除排序链表中的重复元素

给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 思路&#xff1a;判断下一个是否相同即可。 /*** Definition for singl…

tcpdump的用法

第一种是关于类型的关键字&#xff0c;主要包括host&#xff0c;net&#xff0c;port, 例如 host 210.27.48.2&#xff0c;指明 210.27.48.2是一台主机&#xff0c;net 202.0.0.0 指明 202.0.0.0是一个网络地址&#xff0c;port 23 指明端口号是23。如果没有指定类型&#xff0…

关于NFS服务器的原理总结和mount挂载

NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁…

leetcode203 移除链表元素

删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val 6 输出: 1->2->3->4->5 思路&#xff1a;就删呗&#xff0c;注意第一个数可能会被删 /*** Definition for singly-linked list.* public class ListNode {* …

不需要安装max或者xcode的object C开发环境

有时候很多人在没有mac开发机的时候&#xff0c;都想着安装一个虚拟mac机&#xff0c;或者用codeblock去配置成一个OC开发环境&#xff0c;我之前在学习OC的时候就这么办过&#xff0c;虚拟机卡的要死&#xff0c;codeblock本来就不是专门用来做OC开发的&#xff0c;还要自己弄…

leetcode338 比特位计数

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i &#xff0c;计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可…