vector初始化

第9章 顺序容器

て烟熏妆下的殇ゞ 提交于 2019-12-05 03:04:28
exercises section 9.2 9.2 list<deque<int> > list_deque_int; section 9.2.1 迭代器 1、迭代器与容器一样有公共的接口(forward_list的迭代器不支持递减运算符(--) exercise section 9.2.1 9.3、 1.迭代器必须指向同一个容器中的元素,或者容器最后一个元素之后的位置。 2.end不在begin之前。 9.4、 //p9_4.cpp #include <vector> #include <iostream> using namespace std; bool find(vector<int>::iterator first, vector<int>::iterator last, int val) { bool exist = false; //用来指示是否找到指定值,初始为false for(auto ix = first; ix != last; ++ix)//遍历迭代范围 { if(*ix == val) //若值相等 { exist = true; //说明找到了指定的值 break; //停止迭代 } } return exist; //返回exist,若存在则exist为true,否则为false } 9.5、 vector<int>::iterator find

创建vector<T>容器

依然范特西╮ 提交于 2019-12-05 02:40:19
vector<T> 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。 vector<T> 容器可以方便、灵活地代替数组。在大多数时候,都可以用 vector<T> 代替数组存放元素。只要能够意识到,vector<T> 在扩展容量,以 及在序列内部删除或添加元素时会产生一些开销;但大多数情况下,代码不会明显变慢。 为了使用 vector<T> 容器模板,需要在代码中包含头文件 vector。 创建vector<T>容器 下面是一个生成存放 double 型元素的 vector<T> 容器示例: std :: vector<double> values ; 因为容器中没有元素,所以没有分配空间,当添加第一个数据项时,会自动分配内存。可以像下面这样通过调用 reserve() 来增加容器的容量: values . reserve ( 20 ); 这样就设置了容器的内存分配,至少可以容纳 20 个元素。如果当前的容量已经大于或等于 20 个元素,那么这条语句什么也不做。注意,调用 reserve() 并不会生成任何元素。values

C++ vector初始化方式

空扰寡人 提交于 2019-12-05 02:39:11
C++的初始化方法很多,各种初始化方法有一些不同。 (1): vector<int> ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的情况。 (2): vector<int> ilist2(ilist); vector<int> ilist2 = ilist; 两种方式等价 ,ilist2 初始化为ilist 的拷贝,ilist必须与ilist2 类型相同,也就是同为int的vector类型,ilist2将具有和ilist相同的容量和元素 (3): vector<int> ilist = {1,2,3.0,4,5,6,7}; vector<int> ilist {1,2,3.0,4,5,6,7}; ilist 初始化为列表中元素的拷贝,列表中元素必须与ilist的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接拷贝,其他类型会进行类型转换。 (4): vector<int> ilist3(ilist.begin()+2,ilist.end()-1); ilist3初始化为两个迭代器指定范围中元素的拷贝,范围中的元素类型必须与ilist3 的元素类型相容,在本例中ilist3被初始化为{3,4,5,6}。注意

1254. 统计封闭岛屿的数目

一曲冷凌霜 提交于 2019-12-05 02:31:14
题目:   有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。   我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。   如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。   请返回封闭岛屿的数目。          输入 :grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]    输出 :2    解释: 灰色区域的岛屿是封闭岛屿,因为这座岛屿完全被水域包围(即被 1 区域包围)。 分析:   1.对于边界而言,即使其为陆地,也至少存在一个变不能临近水域,所以不可能构成孤岛;   2.对于边界上的陆地而言,其相邻的陆地,肯定也构不成孤岛,即所能到达的陆地,均不可以。   3.对于剩余区域的陆地X,其所能到达的陆地Y,能够和X构成同一片岛屿。 方案:(参考别人的 https://leetcode-cn.com/problems/number-of-closed-islands/solution/yi-ti-kan-tou-dfs-he-dfs-by-xiao-xiao-suan-fa

emplace与insert的区别(C++11)

偶尔善良 提交于 2019-12-04 09:14:43
C++11中大部分的容器对于添加元素除了传统的 insert 或者 pusb_back/push_front 之外都提供一个新的函数叫做 emplace。 比如如果你想要向 std::vector 的末尾添加一个数据,你可以: std::vector<int> nums; nums.push_back(1); 你也可以使用: std::vector<int> nums; nums.empace_back(1); 避免不必要的临时对象的产生 emplace 最大的作用是避免产生不必要的临时变量,因为它可以完成 in place 的构造,举个例子: struct Foo { Foo(int n, double x); }; std::vector<Foo> v; v.emplace(someIterator, 42, 3.1416); // 没有临时变量产生 v.insert(someIterator, Foo(42, 3.1416)); // 需要产生一个临时变量 v.insert(someIterator, {42, 3.1416}); // 需要产生一个临时变量 这是 e m p l a c e e m p l a c e 和 i n s e r t i n s e r t 最大的区别点。 e m p l a c e e m p l a c e 的语法看起来不可思议,在上

AcWing STL初步学习

╄→尐↘猪︶ㄣ 提交于 2019-12-04 02:41:10
vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() begin()/end() [] 支持比较运算,按字典序 pair<int, int> first, 第一个元素 second, 第二个元素 支持比较运算,以first为第一关键字,以second为第二关键字(字典序) string,字符串 size()/length() 返回字符串长度 empty() clear() substr(起始下标,(子串长度)) 返回子串 c_str() 返回字符串所在字符数组的起始地址 queue, 队列 size() empty() push() 向队尾插入一个元素 front() 返回队头元素 back() 返回队尾元素 pop() 弹出队头元素 priority_queue, 优先队列,默认是大根堆 push() 插入一个元素 top() 返回堆顶元素 pop() 弹出堆顶元素 定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q; stack, 栈 size() empty() push() 向栈顶插入一个元素 top() 返回栈顶元素 pop() 弹出栈顶元素 没有clear deque

STL vector 介绍连载1-2-3

安稳与你 提交于 2019-12-03 20:52:49
STL简介: STL = Standard Template Library,标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。 STL被内建在你的编译系统之内。 在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。 STL一般包括六大组件: 容器,算法,迭代器,仿函式,配接器,配置器。 vector简介: vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器

拓扑排序【Kahn算法(bfs)和dfs求拓扑序列及判环】

爱⌒轻易说出口 提交于 2019-12-03 12:02:01
拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,该排序满足这样的条件——对于图中的任意两个结点 u 和 v ,若存在一条有向边从 u 指向 v ,则在拓扑排序中 u 一定出现在 v 前面。 当且仅当一个有向图为有向无环图(DAG)时才存在对应于该图的拓扑排序。每一个有向无环图都 至少 存在一种拓扑排序。 拓扑排序的实现: ①Kahn算法【常可用来判断该图是否是DAG(有向无环图)】 算法复杂度为O(v+e)。 算法实现:循环执行以下两步直到不存在入度为0的顶点为止。 (1)选择一个入度为0的顶点并输出之;(2)从网中删除此顶点及其所有出边。 循环结束后,若输出的顶点数小于网中的顶点数,则该图存在回路,否则输出的顶点序列就是拓扑序列,该图也即为DAG图。 该算法可借助队列实现 。类似于bfs:首先将入度为0的顶点入队,取出队头元素进行拓展,找其邻接点,每个邻接点的入度-1,当入度变为0时则入队。循环此操作直到队列为空。出队顶点序列即为拓扑序列。 int k=0; void toposort() { queue<int>q; for(int i=1;i<=n;i++) if(!indegree[i]) q.push(i); while(!q.empty()){ int u=q.front(); q

第十三周(Dungeon Game)

允我心安 提交于 2019-12-03 11:26:00
第十三周(Dungeon Game) 目录: 本周完成题目 主要过程思路 相关代码 一、本周完成题目 本周共完成2道题目,1道Hard,1道 Medium。 具体完成题目及难度如下表: # Title Difficulty 63 Unique Paths II Medium 174 Dungeon Game Hard 题目内容 1、Unique Paths II   Follow up for “Unique Paths”: Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the middle of a 3x3 grid as illustrated below. [ [0,0,0], [0,1,0], [0,0,0] ] The total number of unique paths is 2. 题目大意 :给定一个二维数组,数组中1代表不能访问,0代表可以访问,求从左上角到右下角共有多少种路径。 2、Dungeon

C++ STL——string和vector

核能气质少年 提交于 2019-12-03 09:36:52
目录 一 STL基本概念 二 string容器 三 vector容器 3.1 vector动态增长原理 3.2 vector构造函数 3.3 vector常用赋值操作 3.4 vector大小操作 3.5 vector数据存取操作和插入删除 3.6 使用swap()收缩空间 3.7 使用reserve()预留空间提高程序效率 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 一 STL基本概念 STL(Standard Template Library)标准模板库,最早是惠普实验室开发的一系列软件的统称,现在主要出现在C++中,但是在引入C++之前该技术已经存在很长的时间了。 STL从广义上分为:容器(container),算法(alogrithm)和迭代器(iterator)。容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。 在C++标准库当中,隶属于STL的占到了80%以上。在C++标准库中,STL被组织成以下13个头文件: <algorithm> <deque> <functional> <iterator> <vector> <list> <map> <memory> <numeric> <queue> <set> <stack>