vector初始化

C++ STL基本容器使用

怎甘沉沦 提交于 2019-12-17 12:31:29
---恢复内容开始--- C++ STL基本容器使用 1:关联容器和顺序容器    c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。 容器类自动申请和释放内存,我们无需new和delete操作。 2:顺序容器的介绍 1):vector,需要包含头文件#include<vector> 主要的操作有 //1.定义和初始化 vector<int> vec1; //默认初始化,vec1为空 vector<int> vec2(vec1); //使用vec1初始化vec2 vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2 vector<int> vec4(10); //10个值为0的元素 vector<int> vec5(10,4); //10个值为4的元素 //2.常用操作方法 vec1.push_back(100); //尾部添加元素

标准库

烂漫一生 提交于 2019-12-17 10:29:18
//STL // vector // :对大小的控制,重新配置时的数据移动效率,vector动态增加大小,是以原大小的两倍另外配置一块较大的空间,将内容拷贝过来,在原内容之后构造新元素,释放原空间。 #include<vector> using namespace std; //1. 声明及初始化 vector<int> a; //声明一个int型向量a vector<int> a(10); //声明一个初始大小为10的向量 vector<int> a(10,1); //声明一个初始大小为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}; vector<int> a(n, n+5); //将数组n的前5个元素作为向量a的初值 vector<int> a(&n[1], &n[4]); //将n[1] - n[4]范围内的元素作为向量a的初值 //2. 添加元素 vector<int> a; a.push_back(1); //在尾部加入一个数据 a.pop_back(); //删除最后一个数据 a.insert(a.begin(), 0); //在a

C++ STL--顺序容器(vector)

我们两清 提交于 2019-12-17 05:25:54
STL(标准模板库)   一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。 C++标准模板库的核心包含以下组件:     容器(containers):用来管理某一类对象的集合,C++提供了各种不同类型的容器,如deque,list,vector,map    算法(algorithms)算法用于作用容器。提供各种执行操作,包括初始化,排序,搜索,转换等   迭代器(iterators)迭代器用于遍历对象集合的元素 vector(向量) vector的数据安排和操作方式与数组很像,两者区别在于空间运用的灵活性,数组是静态空间,一旦分配,不可改变;vector是动态空间,随着元素加入,内部机制可以动态的增加或者减少元素,内存管理可以自动完场,并且提供了2个成员函数:capacity和reserve,使程序员可以与vector容器内存分配的实现部分交互工作。   capacity获取容器需要分配更多的存储空间之前能够储存的元素总数   reserve操作告诉vector容器应该预留多少个元素的存储空间 capacity和size的区别   size指容器当前拥有的元素个数   capacity是指容器必须分配之前可以存储的元素总数,当元素个数超过capacity总数时,因空间 不足

350. 两个数组的交集 II

旧巷老猫 提交于 2019-12-13 21:08:54
ID: 350 TITLE: 两个数组的交集 II TAG: Java,Python,Map 方法一:哈希映射 前面的问题 349. 两个数组的交集 ,我们使用 set 来实现线性时间复杂度。在这里,我们需要使用 HashMap 来跟踪每个数字出现的次数。 我们先在 HashMap 记录一个数组中的存在的数字和对应出现的次数。然后,我们遍历第二个数组,检查数字在 HashMap 中是否存在,如果存在且计数为正,则将该数字添加到答案并减少 HashMap 中的计数。 检查数组的大小并对较小的数组进行哈希映射是一个小细节,当其中一个数组较大时,会减少内存的使用。 算法: 如果 nums1 元素个数大于 nums2 ,则交换数组元素。 对于 nums1 的每个元素,添加到 HashMap m 中,如果元素已经存在则增加对应的计数。 初始化 k = 0 ,记录当前交集元素个数。 遍历数组 nums2 : 检查元素在 m 是否存在,若存在且计数为正: 将元素拷贝到 nums1[k] ,且 k++ 。 减少 m 中对应元素的计数。 返回 nums1 前 k 个元素。 vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { if (nums1.size() > nums2.size()) { return intersect

集合——Vector和ArrayList的比较

只谈情不闲聊 提交于 2019-12-13 04:49:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天研究了一下Vector和ArrayList的源码,又加深了对这两个类的理解。 List接口下一共实现了三个类:ArrayList,Vector,LinkedList。LinkedList就不多说了,它一般主要用在保持数据的插入顺序的时候。ArrayList和Vector都是用数组实现的,主要有这么三个区别: 1、Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比; 2、两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的 ,很多网友说 Vector增加原来空间的一倍,ArrayList增加原来空间的50%, 其实也差不多是这个意思,不过还有一点点问题可以从源码中看出,一会儿从源码中分析。 3、Vector可以设置增长因子,而ArrayList不可以, 最开始看这个的时候,我没理解什么是增量因子,不过通过对比一下两个源码理解了这个,先看看两个类的构造方法: ArrayList有三个构造方法:分别是 public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。 public

零钱兑换-动态规划

*爱你&永不变心* 提交于 2019-12-13 01:26:30
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明: 你可以认为每种硬币的数量是无限的。 题解 动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫测,至于各种高大上的术语,那是吓唬别人用的,只要你亲自体验几把,这些名词的含义其实显而易见,再简单不过了。 至于为什么最终的解法看起来如此精妙,是因为动态规划遵循一套固定的流程:递归的暴力解法 -> 带备忘录的递归解法 -> 非递归的动态规划解法。这个过程是层层递进的解决问题的过程,你如果没有前面的铺垫,直接看最终的非递归动态规划解法,当然会觉得牛逼而不可及了。 当然,见的多了,思考多了

c++实现LL1文法

冷暖自知 提交于 2019-12-11 19:58:39
c++实现LL1文法 简介 参考代码 测试 输入数据 截屏 简介 利用c++计算文法的firsr,follow,select 集合,然后判断文法是否为LL1文法,并构造预测分析表,对输入字符串进行分析 参考代码 # include <iostream> # include <map> # include <vector> # include <set> # include <list> # include <cstdio> # include <iomanip> using namespace std ; typedef char grammarType ; grammarType start , S ; //开始符号,S用来作为输入 map < grammarType , int > ter ; //终结符集合 vector < grammarType > terInx ; //通过索引查找终结符 map < grammarType , int > nonter ; //非终结符集合 vector < grammarType > nontInx ; //通过索引查找非终结符 vector < grammarType > language ; //需要进行分析的语言,即输入字符串 int terNum , nontNum , proSize , Lsize ; //终结符数目

STL标准库中string,vector,list使用的异同点

杀马特。学长 韩版系。学妹 提交于 2019-12-11 10:30:35
我们一起来学习 常用接口 string类常见构造: 函数名 功能说明 string() 构造空的string类对象,即空字符串 string(const char* s) 用C-string来构造string类对象 string(size_t n, char c) string类对象中包含n个字符c string(const string&s) 拷贝构造函数 void Teststring() { string s1; // 构造空的string类对象s1 string s2("hello bit"); // 用C格式字符串构造string类对象s2 string s3(s2); // 拷贝构造s3 } vector类常见构造函数: 函数名 功能说明 vector() 无参构造 vector(size_type n, const value_type& val = value_type()) 构造并初始化n个val vector (const vector& x); 拷贝构造 vector (InputIterator first, InputIterator last); 使用迭代器进行初始化构造 std::vector<int> first; std::vector<int> second (4,100); std::vector<int> fourth (third);

C++容器用法整理

时光总嘲笑我的痴心妄想 提交于 2019-12-11 07:51:28
文章目录 Vector 声明 定义 举例 操作 增 定义 举例 删 定义 举例 Vector 声明 定义 std :: vector < 变量类型 > 变量名 //不定长 std :: vector < 变量类型 > 变量名 ( 数量 ) //定义一定数量长度的vector std :: vector < 变量类型 > 变量名 ( 数量 , 初始值 ) //定义一定数量长度,并且每个都为初始值的vector std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector ) //利用另一个vector来初始化 std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector迭代器指针 1 , 另一个相同类型的vector迭代器指针 2 ) //利用另一个vector的两个指针所指区间内的值来初始化 举例 std :: vector < float > a ; std :: vector < float > a ( 10 ) ; //长度为10个float的vector std :: vector < float > a ( 10 , 1.5 ) ; //长度为10,且每个初始值为1.5的float类型vector std :: vector < float > b ( 10.2 .3 ) ; std :: vector < float

c++之STL总结

浪尽此生 提交于 2019-12-11 00:59:23
c++中的STL(Stand Template Library)提供了最基本的数据结构和算法,功能十分强大。主要分为 容器 (数组,队列,链表,栈,集合等等), 迭代器 (一种对象,用来遍历容器中的元素)和常见算法(排序,反转等) 文章目录 容器 字符串 vector list deque stack multiset&set multimap&map 容器 字符串 包含文件:c++头文件中: #include<string> 常用方法: 初始化: string str:生成空字符串 string s ( str ) :生成字符串为str的复制品 string s ( str , strbegin , strlen ) :将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值 string s ( cstr , char_len ) :以C_string类型cstr的前char_len个字符串作为字符串s的初值 string s ( num , c ) :生成num个c字符的字符串 string s ( str , stridx ) :将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值 直接用另一个字符串赋值 如str2 . assign ( str1 ) ; 即用str1给str2赋值 . 用另一个字符串的一个子串赋值 如str3