vector初始化

重温C++

老子叫甜甜 提交于 2019-12-10 10:01:18
C++ 1 子函数可以把定义放在MAIN函数前, 实现在MAIN函数后 2 函数之间的值传和地址传方式 call ( ) { vector < string > name ; string lastname who_is ( & name , & lastname ) ; cout << name << endl ; } void who_is ( vector < string > * p_firstname , string * p_lastname ) { string l_v_str_firstname ( "曾" ) ; string l_v_str_lastname ( "大侠" ) ; * p_lastname = l_v_str_firstname ; p_firstname - > push_back ( l_v_str_firstname ) ; } 调用函数call把本地变量的name地址传给被调用函数who_is 被调函数声明为指针 string * p_name 给指针赋值 * p_lastname = l_v_str_firstname ; 给指针赋地址 p_name = & l_v_str_firstname 被调函数who_is 不能把函数内部的变量传到外面去,因为函数调用完后就被清除了。 这样函数内部要把工作结果返回出去,一方面可以通过RETRUN

c++ vector 使用注意事项

倾然丶 夕夏残阳落幕 提交于 2019-12-10 02:41:34
1. 初始化 c++ 11以后新增了大括号{}的初始化方式,需要注意与()的区别,如: std::vector<int> vecTest1(5); //初始化5个元素,每个都是0 std::vector<int> vecTest2{ 5 }; //初始化1个元素,值是5 2. 添加元素:push_back 通过push_back添加新的元素进入vector后,vector的内存 有时候 会发生变化, 这取决于size和capacity大小, 当然这些都是系统来处理的,详细可以参考stl源码 当size<capacity的时候,直接加到末尾,不会变化 当size==capacity的时候,会重新申请另外一块内存,然后copy过去加到尾部,这个时候就会有变化了。 对于stl的容器,都有成员: begin() //起始位置 end() //结束位置 size() //当前大小 capacity() //当前容量,即已申请的内存大小 vector是一段连续的内存空间,有三个标识内存的位置,start,end,finish, size=end-start, capacity=finish-start 很多时候在使用vector的时候,会看到size=capacity,这个时候直接添加元素到尾部,内存明显是不够的,此时会重新在别处分配一块大小足够 有时候也有size<capacity,

王道机试指南题解(C/C++版)

拜拜、爱过 提交于 2019-12-09 17:08:22
第2章 经典入门 一 排序 例 2.1 排序 代码 2.1 冒泡排序(时间复杂度 \(O(n^2)\) ) #include <iostream> using std::cin; using std::cout; using std::endl; #include <vector> using std::vector; #include <algorithm> using std::swap; bool bubble(int lo, int hi, vector<int> &ivec) { bool sorted = true; // 整体有序标志 while (++lo < hi) // 自左向右,逐一检查各对相邻元素 if (ivec[lo - 1] > ivec[lo]) { // 若逆序,则 sorted = false; // 意味着尚未整体有序,并需要 swap(ivec[lo - 1], ivec[lo]); // 交换 } return sorted; } void bubbleSort(int lo, int hi, vector<int> &ivec) { while (!bubble(lo, hi--, ivec)); // 逐趟做扫描交换,直至全序 } int main() { int n; vector<int> ivec; cin >> n; while

C++的vector容器清空

倖福魔咒の 提交于 2019-12-08 23:34:37
  c++内部STL库中自带了一个容器vetcor, 自带了清空方法——clear()。但是clear使用之后,并不能清空数据,其数据再未被覆盖之前是不会改变的,个人猜测clear仅仅把指针挪动到了起始位置,所以需要清空置值的话,就需要配合上resize方法,resize重分配之后是可以直接 [ ] 访问的。    reszie有被重载过一次,有两种实现方式:     1、void resize( std::size_t __new_size, int __x);     2、void resize( std::size_t __new_size);   多出来的x是想初始化后生成的数,(其实个人感觉gcc里的函数声明的原型应该是这样的 void resize( std::size_t __new_size, int __x = 0); 默x为0) 当然,也可以用循环的方式进行清空。(目前只能想到这些)   如果想要清空二维的vetcor,那就得一行行的clear和resize。 学习不易,诸君共勉! 来源: https://www.cnblogs.com/daker-code/p/12008620.html

【动态规划】01背包问题

♀尐吖头ヾ 提交于 2019-12-08 11:26:30
01背包问题 问题描述 给定 N 种物品和一个最大载重量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 问题分析 对于每个物品,只能选择装或者不装,不能选择只装物体的一部分,因此不能使用单位重量的价值进行排序的方法(贪心)来解决,需要用到动态规划来解决。 动态规划的三个核心 最优子结构 边界 状态转移方程 对于该问题而言,由于第i+1件物品只有两种选择(选与不选),因此前i+1件产品的最优解就是 前 ,子结构就是 前i件物品装在承重为j的容器中 ,可以用 result[i][j] 来表示。 边界就是在只装第一件物品时的情况。 通过上面的对子结构的分析,可以得到状态转移方程: 1. j < w[i]时,即剩余载重量不足以装下当前物品,应有最优解即是前i-1件时的解, result[i][j] = result[i-1][j] 2. j >= w[i]时,即还可以装下当前物品,因此解应为 装与不装 当前物品两种情况中的最大解。如果不装,即 result[i-1][j] ;如果装,,即 result[i-1][j-w[i]] + v[i] 。因此取最大值结果为 result[i][j] = max( result[i-1][j], result[i-1][j-w[i]] + v[i] ) 。 代码 1

GameHollywood 面试笔记

依然范特西╮ 提交于 2019-12-06 12:25:14
GameHollywood 面试笔记 Intro 面试的职位是 C++开发工程师,主要聊的还是C++。在过程中自我感觉面得还行,至少没 上次 那么蠢。 聊的内容主要集中在STL和线程安全、资源管理的层面。 惯例的,填完面试信息表并简历一起上交,然后等面试官来客套完,就开始聊技术了。 注意,面试官的提问并非原话,有修饰和脑补。 0. 预热:你用哪个版本的C++? 客套话什么的就略了。 面试官:...行,那我们就聊聊C++吧。你常用哪个版本的C++? 我:我比较常用的是C++11。 C++版本这个问题面试里应该不多见,不过作为引入的话题还行,标准之神会瞑目的。 对于 C++版本 这个词,很大概率上大家说的应该就是C++标准委员会 WG21 制定的C++标准了,最新版本的标准文档是C++17定稿 N4659 ,制定中的C++20标准文档可以访问 WG21/docs/papers/2018 查阅。 需要注意的是,如果答成了 我用VC6 之类的骚话,很大概率会留下不好的映像——或者对方也是忠实的VC6神教教徒的话,达成共识也说不定。 闲话少叙。 1. 起手式: std::shared_ptr 面试官:说说 std::shared_ptr 是怎么实现的?一般怎么去使用它? 答: shared_ptr 是通过 引用计数 实现的,它可以作为容器元素,在程序里传递blabal.....而且

java之vector详细介绍

一世执手 提交于 2019-12-05 22:09:31
https://www.cnblogs.com/msymm/p/9873551.html 1 vector介绍 Vector简介 Vector 是 矢量队列 ,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。 Vector 继承了AbstractList,实现了List;所以, 它是一个队列,支持相关的添加、删除、修改、遍历等功能 。 Vector 实现了RandmoAccess接口,即 提供了随机访问功能 。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。 Vector 实现了Cloneable接口,即实现clone()函数。它能被克隆。 和ArrayList不同, Vector中的操作是线程安全的 。 Vector的构造函数 Vector共有4个构造函数 // 默认构造函数 Vector() // capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。 Vector(int capacity) // capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。 Vector

C++踩坑——用memset对vector进行初始化

浪子不回头ぞ 提交于 2019-12-05 14:02:32
在一段程序中,使用memset对vector进行了初始化,然后得到了错误的结果。找这个bug花费了很长时间。 vector中有其自身的结构,不能单纯的按字节进行初始化。使用memset对vector进行初始化,会破坏vector中的结构,造成vector中的数据错误。我使用memset将vector中元素全部置为1,最终发现结果相差甚远。 来源: https://www.cnblogs.com/Peyton-Li/p/11926566.html

Java list的实现类

限于喜欢 提交于 2019-12-05 07:35:19
Java list的实现类 本文是根据 博文 整理 Java中,List接口一共有三个实现类:ArrayList、Vector和LinkList。 其中ArrayList和Vector都是利用数组这一个数据结构实现的,所以具有较强的随机访问能力,但是相应的,插入和删除的能力就比较弱: ArrayList和Vector要求实现所用的数组的元素之间是不能有间隔的 ,换言之就是如果你在中间删除了一个元素,后面的都必须向前移动来补位。我猜这是为了防止数组碎片化的问题,而在末尾插入和删除的代价相对比较小。还有一个问题,就是数组在初始化的时候要约定一个大小,所以当插入的元素个数大于当前空间的最大大小时,就需要申请新的内存空间、创建新的数组并将现有数据拷贝过去(ArrayList在内存不够时默认是扩展50% + 1个,Vector是默认扩展1倍),这也是很耗时间的。所以这两种适合随机访问和遍历,不适合大量的增删。 Vector和ArrayList的区别在于Vector支持线程之间的同步,也就是只有一个线程可以在同一时刻写入该Vector。但是做到这种功能需要花费很高的代价,使用起来比较慢。 LinkList是利用链表实现的,那么相应的,它的增删代价比较小,但是随机访问的能力就弱了。ListList还定义了比List接口要求的更多的方法,例如操作表头和表尾的元素,可以用来当成队列

队列+BFS(附vector初试)

让人想犯罪 __ 提交于 2019-12-05 05:24:34
优先队列的使用: include<queue>//关联头文件 struct node{ int x,y; friend bool operator < (node d1,node d2) { return d1.x>d2.x; }//定义优先队列运算规则必须 } //程序里 priority_queue<node> q;//定义优先队列 node cur,next; q.push(cur);//push !q.empty//队列非空 cur=q.pop();//弹出 next=q.top();//队首元素 加广搜: 压的时候一层层压,队列非空时一个个弹出,节点也带上它的层数就好了 Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and