vector初始化

C++中类成员变量的初始化问题

ⅰ亾dé卋堺 提交于 2020-02-17 16:37:38
C++11之后允许对非静态成员变量进行初始化(in-class initialization),不过对于 非fundamental(非基本数据) 类型需要采用的是initializer_list来实现的 所以如下代码是错误的: class A{ public: int x=1; string s="qweqetfqw"; vector<int>p(1,0);//这句错了,vector不是基本数据类型,必须用大括号初始化 }; 改成下面这样就正确了: class A{ public: int x=1; string s="qweqetfqw"; vector<int> p{0};//用大括号直接初始化 }; 或者: class A{ public: int x=1; string s="qweqetfqw"; vector<int> p={0};//用复制拷贝函数初始化 }; 来源: https://www.cnblogs.com/FdWzy/p/12322161.html

初探迭代器Iterators

落花浮王杯 提交于 2020-02-17 11:26:47
一、概念引入: 除了使用下标来访问容器对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(Iterators)。 迭代器是一种 检查容器内元素并遍历元素的 数据类型 。 所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。 因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。(即: 尽量使用迭代器访问容器元素 。) 二、困惑——迭代器和迭代器类型 最开始的时候容易搞不清楚,原因之一是由于同一个术语 iterator 往往表示两个不同的事物。 一般意义上指的是迭代器的概念;而具体而言时指的则是由容器定义的具体的 iterator 类型,如 vector<int> 。 重点要理解的是,有许多用作迭代器的类型,这些类型在概念上是相关的。若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素,并访问这些元素的值),我们就称这种类型为迭代器。 即: 每个容器都定义了一个名为 iterator 的类型,而这种类型支持(概念上的)迭代器的各种操作。 三、begin 和 end 操作 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。 如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素。 由 end 操作返回的迭代器指向

C++之STL迭代器

别来无恙 提交于 2020-02-17 11:26:11
迭代器是一种检查容器内元素并遍历元素的数据类型。可以替代下标访问vector对象的元素。 每种容器类型都定义了自己的迭代器类型,如 vector: vector< int>::iterator iter; 这符语句定义了一个名为 iter 的变量,它的数据类型是 vector<int> 定义的 iterator 类型。每个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义相同。 begin 和 end 操作 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素: vector< int>::iterator iter = ivec.begin(); 上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]。由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。由 end 操作返回的迭代器并不指向 vector 中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完 vector 中所有元素。 【备注

[C++ STL] vector使用详解

允我心安 提交于 2020-02-17 09:23:16
一、概述 vector(向量): 是一种序列式容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 二、定义及初始化 使用之前必须加相应容器的头文件: #include <vector> // vector属于std命名域的,因此需要通过命名限定,例如using std::vector; 定义的实现代码如下: vector<int> a; // 定义一个int类型的向量a vector<int> a(10); // 定义一个int类型的向量a,并设置初始大小为10 vector<int> a(10, 1); // 定义一个int类型的向量a,并设置初始大小为10且初始值都为1 vector<int> b(a); // 定义并用向量a初始化向量b vector<int> b(a.begin(), a.begin()+3); // 将a向量中从第0个到第2个(共3个)作为向量b的初始值 除此之外,还可以直接使用数组来初始化向量: int n[] = {1, 2, 3, 4, 5} ; // 将数组n的前5个元素作为向量a的初值 // 说明:当然不包括arr[4]元素

第三章:字符串、向量和数组

时光毁灭记忆、已成空白 提交于 2020-02-17 08:04:34
一、string 1、包含头文件string; 命名空间std #include<string> using std::string 2、读取操作时,string对象会自动忽略开头的空白,直到遇到下一个空白 如果想要保留空白,使用getline函数:读到换行符为止,但不把换行符写入到string中 string s1, s2, s3; cin >> s1 >> s2; //输入“ hello world ” cout << s1 << s2 << endl; //得到“helloworld” getline(cin, s3); //输入 “ hello world ” cout << s3 << endl; //得到 “ hello world ” 3、string 可以得到长度,使用size()函数,返回的是一个无符号型整数,所以要注意在用于循环判断时不要与有符号数一起使用 4、string对象的比较,先会比较长度,如果相同,再比较第一个相异的字符 5、string对象的相加:+号两边必须有一遍是string类型 6、通常C++程序的头文件为cname,而C程序头文件为name.h 7、范围for for(declaration : expression) //每次迭代,declaration部分会被初始化为expression部分的下一个元素 statement

dp-最长子序列问题

天大地大妈咪最大 提交于 2020-02-15 20:56:54
基本思想: 300. 最长上升子序列 M 给定一个无序的整数数组,找到其中最长上升子序列的长度。 通用方法: class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if (n == 0) return 0; vector<int> dp(n,1); for(int i = 0; i < n; i++){ for(int j = 0; j < i; j++) if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j]+1); } return *max_element(dp.begin(),dp.end()); } }; 用二分查找,可以将复杂度下降到 NlogN 定义一个 tails 数组,其中 tails[i] 存储长度为 i + 1 的最长递增子序列的最后一个元素。对于一个元素 x, 如果它大于 tails 数组所有的值,那么把它添加到 tails 后面,表示最长递增子序列长度加 1; 如果 tails[i-1] < x <= tails[i],那么更新 tails[i] = x。 class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums

C++中数组和vector

丶灬走出姿态 提交于 2020-02-15 16:10:47
本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中数组是一种内置的数据类型。 数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。 1、定义和初始化内置数组 (1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表达式。定义数组的时,必须指定数组的类型和大小。 (2)初始化时,允许不指明数组的维度,不指明维度,则编译器根据数组初始值的大小推测出维度;若指定维度,则初始值的个数要小于等于维度,当小于时,不足的部分为0(其实还是等于维度)。 1 int a[]={1,2,3}; //数组a的大小为3; 2 int a[5]={1,2,3}; //等价于{1,2,3,0,0},大小为5 3 int a[5]={1,2,3,4,5,6}; //错误,初始值过多 还有一种特殊的情况:字符数组。当用字符串字面值去初始化数组时,要注意字符串字面值的后面还有一个空字符。也就是说,数组的大小要等于字面值的大小加1。 特别注意:不允许拷贝和赋值------不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值。 1 int a[]={1,2,3}; 2 int a2[]=a; //错误 3 a2=a; //错误 2

j2me集合类Vector分析总结

喜你入骨 提交于 2020-02-15 16:08:12
Vector是java.util包的类,功能是实现了一个动态增长的数组,并为每个包含的元素分配一下整数索引号,这样就可以根据索引号删除、插入一个元素,也可以修改、获得一个元素的值。既然是动态数组,也可以在应用中来调整、裁减数组的长度。Vector的方法都是同步的(Synchronized), 是线程安全的(thread-safe)。 1. 存储管理 Vector是动态数组,因此随着对象元素的添加,当长度(容量)不足时,会自动增长,增长的增量和Vector对象的初始化构造有关。Vector有三个不同的构造函数,如下所示。 (1)指定初始容量和非0容量增量的构造函数 函数原型:public Vector(int initialCapacity, int capacityIncrement); 使用此构造函数,在创建实例时即指定初始的容量以及容量增量(如果capacityIncrement为0,则会抛出IllegalArgumentException异常)。如Vector v1 = new Vector(8,3); v1的初始容量为8,增量为3;这样当容量不足时,自动将容量增长capacityIncrement。 测试代码: Vector v1 = new Vector(8, 3); Integer no; for(int i = 0; i < 15; i++) { no = new

java集合之vector容器

眉间皱痕 提交于 2020-02-15 16:06:21
学完 ArrayList 和 LinkedList 之后,我们接着学习Vector。 第1部分 Vector介绍 第2部分 Vector数据结构 第3部分 Vector源码解析(基于JDK1.6.0_45) 第4部分 Vector遍历方式 第5部分 Vector示例 转载请注明出处: http://www.cnblogs.com/skywang12345/p/3308833.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个构造函数 // 默认构造函数

Java集合框架源码(四)——Vector

孤人 提交于 2020-02-15 16:05:52
第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(int capacity, int capacityIncrement) //