c++ vector学习

参考资料:
cppreference.com

本文代码:
本文源码

目录

    • 隐式成员函数
      • 1.operator= (赋值给容器)
      • 2.assign (将值赋给容器)
    • 元素访问
      • 3.at (访问指定元素,进行下标检查)
      • 4.operator[] (访问指定元素,可能出现访问越界)
      • 5.front (访问第一个元素)
      • 6.back (访问最后一个元素)
      • 7.data (返回数组第一个元素的地址指针)
    • 迭代器
      • 8.begin/cbegin (返回指向容器第一个元素的迭代器 /常量迭代器)
      • 9.end/cend(返回指向容器尾端的迭代器/常量迭代器)
      • 10.rbegin/rcbegin(返回指向容器最后一个元素的迭代器/常量迭代器)
      • 11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)
    • 容量
      • 12.empty (判断容器是否为空)
      • 13.size (返回容器当前元素个数)
      • 14.max_size (返回容器可容纳的最大元素个数)
      • 15.reserve (增加容器容纳空间)
      • 16.capacity (返回容器当前可容纳的元素个数)
      • 17.shrink_to_fit (回收容器未使用的空间)
    • 修改器
      • 18.clear (清除容器中的所有元素)
      • 19.insert (在容器的指定位置插入指定的值)
      • 20.emplace (???)
      • 21.erase (移除容器内指定位置的值)
      • 22.push_back (从容器的尾端添加元素)
      • 23.emplace_back (???)
      • 24.pop_back (移除容器最后一个元素 )
      • 25.resize (改变容器存储元素个数)
      • 26.swap (交换两个容器的内容)
](目录)

隐式成员函数

1.operator= (赋值给容器)

可以用 = 来进行 vector 的赋值,赋值后他们是两个不同的东西,即使修改了vec,也不会修改对tempVec,是深拷贝:

vector<int> vec;
vector<int> tempVec;
tempVec = vec;

2.assign (将值赋给容器)

void assign( size_type count, const T& value );

简单来说就是将vector的内容转成countvalue

tempVec.assign(10,6)
/*
输出:
6 6 6 6 6 6 6 6 6 6 
*/

元素访问

3.at (访问指定元素,进行下标检查)

site超出范围的时候会跑出 std::out_of_range 类型异常

vec.at(site)

4.operator[] (访问指定元素,可能出现访问越界)

vec[site]

5.front (访问第一个元素)

vec.front()

6.back (访问最后一个元素)

vec.bakc()

7.data (返回数组第一个元素的地址指针)

返回的是指向第一个元素的指针

vec.data(site)

迭代器

最简单地理解就是操作容器的指针

8.begin/cbegin (返回指向容器第一个元素的迭代器 /常量迭代器)

返回指向第一个元素的迭代器/常量迭代器(指向的内容不能改变,指向谁可以改)

std::vector<int>::iterator itr = vec.begin();
//指向第二个元素
std::cout<<*(++itr)<<std::endl; std::vector<int>::const_iterator cItr = vec.cbegin();
//指向第一个元素
std::cout<<*cItr<<std::endl;//可以这样
cItr = itr;
//不可以这样:*(++cItr)

9.end/cend(返回指向容器尾端的迭代器/常量迭代器)

返回指向最后一个元素的后一个位置的迭代器(最后一个元素的身后),和begin类似,至于cend除了作为vector的结束之外还有什么用就暂时还没想到。

std::vector<int>::iterator itr = vec.end();
//倒数第一个元素
std::cout << *(--itr) << std::endl;std::vector<int>::const_iterator cItr = vec.cend();
//顺序打印vec
for(itr = vec.beign();i!=cItr;++i){std::cout<<*i<<" ";
}

10.rbegin/rcbegin(返回指向容器最后一个元素的迭代器/常量迭代器)

这是一个逆向迭代器,使用 ++ 的时候不是往后移动,而是往前移动,使用 才能往后移动。

std::vector<int>::reverse_iterator itr = vec.rbegin();
//倒数第二个元素
std::cout  << *(++itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crbegin();
//最后一个元素
std::cout << *cItr << std::endl;

11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)

end类似,end指向容器最后一个元素的后一个位置,rend指向容器第一个元素的前一个位置,所以我也不知道这个crend的其他作用

std::vector<int>::reverse_iterator itr = vec.rend();
//第一个元素是:
std::cout << *(--itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crend();
//逆序打印vec:
for (itr = vec.rbegin(); itr != cItr; ++itr) {std::cout << *itr << " ";
}

容量

12.empty (判断容器是否为空)

为空时返回true,非空时返回false

bool empty() 
if (vec.empty()) {std::cout << "vec为空!\n";}else {std::cout << "vec不为空!\n";}

13.size (返回容器当前元素个数)

vec.size();

14.max_size (返回容器可容纳的最大元素个数)

vec.max_size();

15.reserve (增加容器容纳空间)

将vec的容量增加到大于或等于count,如果count小于当前的已分配的控件大小就不做任何事。

vec.reserve(count);

16.capacity (返回容器当前可容纳的元素个数)

vec.capacity();

17.shrink_to_fit (回收容器未使用的空间)

//假设输出10,vec.size()也是返回10
std::cout << vec.capacity() << std::endl;
//增加容量
vec.reserve(50);
//此时输出50
std::cout << vec.capacity() << std::endl;
//回收空间
vec.shrink_to_fit();
//输出10
std::cout << vec.capacity() << std::endl;

修改器

18.clear (清除容器中的所有元素)

// 假设输出10
std::cout << vec.size() << std::endl;
vec.clear();
// 输出0
std::cout << vec.size() << std::endl;

19.insert (在容器的指定位置插入指定的值)

//插入之前:1 3 5 7 9
//在第3个位置插入4:
tempVec.insert(tempVec.begin() + 3, 4);
//1 3 5 4 7 9//在第3个位置插入4个5:
tempVec.insert(tempVec.begin() + 3, 4, 5 );
//1 3 5 5 5 5 5 4 7 9

20.emplace (???)

21.erase (移除容器内指定位置的值)

//删除第3个位置的值
tempVec.erase(tempVec.begin()+3);//删除容器第0到第5个元素(不包括第5个即[0,5))
tempVec.erase(tempVec.begin(), tempVec.begin() + 5);

22.push_back (从容器的尾端添加元素)

//vec: 1 3 5
vec.push_back(7)
//vec: 1 3 5 7

23.emplace_back (???)

24.pop_back (移除容器最后一个元素 )

//vec: 1 3 5 7
vec.pop_back();
//vec: 1 3 5

25.resize (改变容器存储元素个数)

如果num小于容器当前元素个数则只保留容器前num
如果num大于容器当前元素个数则往容器添加元素直至num

//tempVec.size() 为 20
tempVec.resize(10)
//只剩下前10个元素了//添加到15个元素,用默认值填充
tempVec.resize(15);
//现在tempVec的元素个数为15了,而且后5个是0//添加到20个元素,用指定值填充
tempVec.resize(20,999);
//现在tempVec的元素个数为20了,而且后5个是999

26.swap (交换两个容器的内容)

//交换前:
//vec:1 3 5 7
//tempVec:2 4 6 8
vec.swap(tempVec)
//交换后:
//vec:2 4 6 8
//tempVec: 1 3 5 7

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

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

相关文章

linux关闭声音

对于CentOS/Redhat/RHEL/Fedora系统&#xff0c;使用root身份执行&#xff1a;echo "alias pcspkr off" >> /etc/modprobe.conf转载于:https://www.cnblogs.com/keethebest/p/3434821.html

Bundle Identifier

Bundle Identifier : 产品的唯一标识符 1.在模拟器上面&#xff0c;只能有一个唯一的标识符的应用程序 2.在AppStore上&#xff0c;所有的应用程序的Bundler ID都是唯一的 Bundle ID 公司的反向域名 产品名 Bundle ID 不支持中文&#xff0c;因此如果是上架产品&#xff0c;需…

c++ array学习

参考资料&#xff1a; cppreference.com 本文代码&#xff1a; 本文源码 array和vector的区别是array是和C中的数组类似&#xff0c;不能动态改变数组大小&#xff0c;所以会比vector少很多函数。 目录隐式定义的成员函数1.operator &#xff08;将另一个容器拷贝过来&#x…

lucene4入门(2)搜索

欢迎转载http://www.cnblogs.com/shizhongtao/p/3440479.html 接着上一篇&#xff0c;这里继续搜索&#xff0c;对于搜索和创建一样&#xff0c;首先你要确定搜索位置&#xff0c;然后用规定的类来读取。还要注意一点&#xff0c;确定分词器&#xff0c;因为不同的分词器所创建…

Topcoder SRM 648 (div.2)

第一次做TC全部通过&#xff0c;截图纪念一下。 终于蓝了一次&#xff0c;也是TC上第一次变成蓝名&#xff0c;下次就要做Div.1了&#xff0c;希望div1不要挂零。。。_(:зゝ∠)_ A. KitayutaMart2 万年不变的水题。 #include<cstdio> #include<cstring> #include&…

Kadane's algorithm学习

Kadane’s algorithm 简单来说就是用来计算数组中的连续子数组之和最大是多少 vector<int> vec; int temp 0,ans 0; for(int i0;i<vec.size();i){temp max(tempvec[i],vec[i]);ans max(temp,ans); } return ans;循环的第一行就是用来比较当前位置的值和前面数组…

好用的ajax后台框架

dwz 简单实用的国产jquery Ui框架 http://www.j-ui.com/#_blank转载于:https://www.cnblogs.com/userbibi/p/3441382.html

OpenFire源码学习之十九:在openfire中使用redis插件(上)

Redis插件 介绍 Redis是目前比较流行的NO-SQL&#xff0c;基于K,V的数据库系统。关于它的相关操作信息&#xff0c;本人这里就不做重复了&#xff0c;相关资料可以看这个网站http://www.redis.io/(官网)、http://www.redis.cn/(中文站)。 这里本人想说的是&#xff0c;拿Redis做…

c++ queue学习

参考资料&#xff1a; cppreference.com 本文代码&#xff1a; 本文源码 目录成员函数1.operator &#xff08;赋值给容器&#xff09;元素访问2.front &#xff08;访问第一个元素&#xff09;3.back &#xff08;访问最后一个元素&#xff09;容量4.empty &#xff08;判断容…

没有文件扩展“.js”的脚本引擎问题解决

安装MinGW的时候提示没有文件扩展“.js”的脚本引擎。原因&#xff1a;系统安装Dreamwear、UltraEdit、EditPlus后修改了.js文件的默认打开方式。当想直接执行js脚本时就会出现此错误。解决办法&#xff1a;打开注册表编辑器&#xff0c;定位[HKEY_CLASSES_ROOT.js]这一项&…

160 - 54 eKH

环境&#xff1a;windows xp 工具&#xff1a; 1、OllyDBG 2、IDA 3、exeinfo 查壳发现是程序无壳且用Delphi语言编写 可以通过搜索字符串的方式定位关键函数地址 这里定位到是 00427B44ReadInput(a2, &v17); // 读取输入的usernameif ( StrL…

点赚接口(第二版)

1.查看是否有新消息 url&#xff1a;/get/message/status?user_id{user_id} method&#xff1a;get response&#xff1a; {"code": "ok","msg": "","data": 0 //新消息数目 } 2.获取消息列表 url&#xff1a;/get/messa…

Java基础之线程——使用Runnable接口(JumbleNames)

控制台程序。 除了定义Thread新的子类外&#xff0c;还可以在类中实现Runnable接口。您会发现这比从Thread类派生子类更方便&#xff0c;因为在实现Runnable接口时可以从不是Thread的类派生子类&#xff0c;并且仍然表示线程。Java只允许有单个基类&#xff0c;如果类派生于Thr…

cpri带宽不足的解决方法_白皮书:FPGA赋能下一代通信和网络解决方案(第四部分)...

对PCIe Gen 5的支持除了以太网和存储控制器&#xff0c;Speedster7t FPGA上提供的对PCIe Gen 5的支持还能够与主机处理器紧密集成&#xff0c;以支持诸如sidecar智能网卡(SmartNIC)设计等高性能加速器应用。PCI Gen 5控制器使其能够读取和写入存储在FPGA内存层级结构中的数据&a…

laravel里面使用event

模式&#xff1a;大概是通过一个自定义的event&#xff0c;一个handler&#xff0c;还有一个binder&#xff0c;然后用来简化通知模型 生成自定义的event ./artisan make:event MyEvent 生成自定义的handler ./artisan handler:event MyEventHandler --eventMyEvent 然后在Even…

C语言的条件编译#if, #elif, #else, #endif、#ifdef, #ifndef

有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件&#xff0c;这当然可以通过变量设置&#xff0c;把所有可能用到的代码都写进去&#xff0c;在初始化时配置&#xff0c;但在不同的情况下可能只用到一部分代码&#xff0c;就没必…

山体等高线怎么看_每日一题 | 此处向斜山,你看出来了吗?

每日一题 | 此处向斜山&#xff0c;你看出来了吗&#xff1f;(2018江苏高考)如图为某区域地质简图。该区沉积地层有Q、P、C、D、S2、S1&#xff0c;其年代依次变老。读图回答1&#xff5e;2题。1&#xff0e;从甲地到乙地的地形地质剖面示意图是(  )2&#xff0e;为揭示深部地…

cmake The source directory xxxx does not appear to contain CMakeLists.txt

执行 cmake . 的时候报错&#xff1a; The source directory “xxxx” does not appear to contain CMakeLists.txt 简单来说就是当前文件夹里面没有 CMakeLists.txt

SSH出错--hibernate--org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User]

String queryString "from user where u.userName ? and u.userPassword ?"; ----------------------------------------------------------- 改为&#xff1a; String queryString "from User where u.userName ? and u.userPassword ?"; 我估…

Linux下的tar压缩解压缩命令详解

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的命令连用但只能用其中一个。下面的参数是根据需要…