vector初始化

【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

匿名 (未验证) 提交于 2019-12-02 22:59:29
Contest 81 (2018年11月8日,周四,凌晨) 链接: https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranking: 440/2797。这次题目似乎比较简单,因为我比赛的时候前三题全做出来了(1:12:39),然后第四题有思路,正在写,没写完,比赛完了写完提交也对了。 */ /*--> */ /*--> */ /*--> */ /*--> */ 【821】Shortest Distance to a Character(第一题 4分) 给了一个单词(字符串)s,和单词中的任意一个字母 c,问单词中的每个字母到 c 的最近距离是多少。 Example 1: Input: S = "loveleetcode", C = 'e' Output: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0] 题解:我是用了一个vector记录了所有字符 c 的下标,然后用遍历整个字符串,用一根指针辅助遍历 c 下标数组做的。时间复杂度 O(N)。写法不够优秀,c 的下标数组可以左边右边填一个元素,就不用写那么多判断了吧? 1 class Solution { 2 public: 3 vector<int> shortestToChar(string S, char C) { 4

C++中vector容器的使用方式和函数调用

让人想犯罪 __ 提交于 2019-12-02 22:50:52
#include <vector> vector是一种顺序容器,和数组差不多但是比数组更优越,数组不支持动态扩展但vector容器支持动态拓展因此vector不存在浪费内存 和越界的问题,随机访问比较快但是在中间插入和删除慢,在末端插入和删除比较快,可以用at()作越界检查 一、 定义和初始化 Vector<T> v1; //默认构造函数v1为空 Vector<T> v2(v1);//v2是v1的一个副本 Vector<T> v3(n,i);//v3包含n个值为i的元素 Vector<T> v4(n); //v4含有n个值为0的元素 二、 值初始化 1> 如果没有指定元素初始化式,标准库自行提供一个初始化值进行值初始化。 2> 如果保存的式含有构造函数的类类型的元素,标准库使用该类型的构造函数初始化。 3> 如果保存的式没有构造函数的类类型的元素,标准库产生一个带初始值的对象,使用这个对象进行值初始化。 三、Vector对象最重要的几种操作 1. v.push_back(t) 在数组的最后添加一个值为t的数据 2. v.size() 当前使用数据的大小 3. v.empty() 判断vector是否为空 4. v.insert(v.begin()+i,a) 在i+1个元素前面插入a; 5. v.erase(v.begin()+2) 删除第三个元素 v.ercase(v.begin(

C++ vector的使用方法

落爺英雄遲暮 提交于 2019-12-02 22:48:04
使用场合: vector算是一个比较万金油的容器,它是一个可变大小数组,支持随机访问,不过在尾部以外的位置进行增加和删除操作会比较耗时。通常用vector来代替原始的数组来使用,比较方便。 声明与初始化: 首先要包含头文件,vector的头文件名就是< vector >。 声明方式: #include <bits/stdc++.h> using namespace std ; int main() { ios::sync_with_stdio( false ); vector < int > ve; //声明一个存储int型数据的容器ve vector < vector < int > > vve; //声明一个二维的vector,C++11标准写法 vector < vector < string > > vvs; //两个尖角括号之间要留一个空格,旧编译器的写法 return 0 ; } 初始化: vector的初始化方式很多,书上介绍的如下 #include <bits/stdc++.h> using namespace std ; int main() { ios::sync_with_stdio( false ); vector < int > va; //调用默认构造函数,里面什么也没有 for ( int i= 0 ;i< 5 ;i++) va.push_back(i

c++中vector容器详解

馋奶兔 提交于 2019-12-02 22:47:44
vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。 1.vector声明及初始化

C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法

Deadly 提交于 2019-12-02 19:26:13
每次忘记都去查,真难啊 1 /* 2 C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 3 */ 4 5 /* 6 vector常用用法 7 */ 8 //头文件 9 #include<vector> 10 11 //常用的初始化方法 12 vector<int> v; //直接定义一个整型元素的向量 且未声明长度,其中int的位置可以换成别的数据类型或者结构体等 13 vector<int> v(10); //定义了10个整型元素的向量,其中每一个数都没有初值 14 vector<int> v(10, 5); //定义了10个整型元素的向量,并且为每个元素赋初值5 15 16 //常用的操作 17 v.back(); //返回最后一个元素 18 v.front(); //返回第一个元素 19 v.clear(); //清空v中的元素 20 v.empty(); //判断v是否为空,空则返回true,否则false 21 v.push_back(5); //在最后的一个元素后插入5 22 v.size(); //返回v中的元素的个数 23 24 sort(v.begin(), v.end(), cmp); //sort排序,其中cmp部分与结构体等数据类型自定义排序时cmp相同用法 25 26 for(int i =

第3章 练习题

雨燕双飞 提交于 2019-12-02 14:50:21
3.1、 3.2、 #include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; int main() { string str; //while(getline(cin, str)) //读取整行 while(cin >> str) //读取整列 cout << str << endl; return 0; } 3.3 string 类的输入运算符:在遇到第一个可打印字符前忽略所有的空白字符;获得输入遇到换行符或第一个空格字符读取结束。 getline将输入的空白字符读入并存储,并在遇到第一个换行符读入并丢弃; 3.4 #include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; int main() { string str1, str2; cout << "Please enter string1 : " << endl; getline(cin, str1); cout << "Please enter string2 : " << endl; getline(cin,

c++序列式容器之vector

会有一股神秘感。 提交于 2019-12-02 13:20:43
0.vector源代码 // alloc 是SGI STL的空间配置器 template<class T,class Alloc=alloc> class vector{ public: //vector的嵌套型别定义 typedef T value_type; typedef value_type* pointer; typedef value_type* iterator; typedef value_type* reference; typedef size_t size_type; typedef ptrdiff_t difference_type; protected: //simple_alloc 是SGI STL的空间配置器 typedef simple_alloc<value_type,Alloc> data_allocator; iterator start;//表示目前使用空间的头 iterator finish;//表示目前使用空间的尾 iterator end_of_storage;//表示目前可用空间的尾 void insert_aux(iterator position,const T& x); void deallocate(){ if(start) data_allocator::deallocate(start,end_of_storage

模糊聚类-模拟花朵聚类

不打扰是莪最后的温柔 提交于 2019-12-02 12:26:09
                  模糊聚类 模糊聚类与K-means算法有异曲同工之妙,两者各有优劣势,K-means算法的介绍连接:https://www.cnblogs.com/bokeyuancj/p/11460883.html 基本概念: 聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类 图像处理和模糊规则处理等众多领域中获得最广泛的应用。它把一个没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中。硬聚类把每个待识别的对象严格的划分某类中,具有非此即彼的性质,而模糊聚类建立了样本对类别的不确定描述,更能客观的反应客观世界,从而成为聚类分析的主流。模糊聚类算法是一种基于函数最优方法的聚类算法,使用微积分计算技术求最优代价函数,在基于概率算法的聚类方法中将使用概率密度函数,为此要假定合适的模型,模糊聚类算法的向量可以同时属于多个聚类,从而摆脱上述问题。 模糊聚类分析算法大致可分为三类 (1)分类数不定,根据不同要求对事物进行动态聚类,此类方法是基于模糊等价矩阵聚类的,称为模糊等价矩阵动态聚类分析法。 (2)分类数给定,寻找出对事物的最佳分析方案,此类方法是基于目标函数聚类的,称为模糊C均值聚类。 (3)在摄动有意义的情况下,根据模糊相似矩阵聚类,此类方法称为基于摄动的模糊聚类分析法

C++ STL ----- Vector

喜你入骨 提交于 2019-12-02 11:46:17
STL ● STL:序列式容器—底层为线性结构的序列式容器 String类 :专门存放 字符 的 动态的顺序表 Array:存放任意类型的静态的顺序表 C++11 (了解) Vector :存放 任意类型 的 动态的顺序表 (更看重于用数组来维护) Forward_list:带头结点的循环单链表 C++11(单链表用的不多,了解接口即可) List :存放任意类型的数据---- 带头结点的双向循环链表 Deque:动态的二维数组 (用的比较少) ● 特殊容器: Stack:栈 Queue:队列 ● 迭代器 :方便用户便利的容器-------好处:可以不用知道容器底层的数据结构 C++:string::iterator-------------》char* Vector::iterator--------》T* String VS vector 1.array 定义的时候 必须定义数组的元素个数 ;而vector不需要;且只能包含整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象,非const变量以及需要到运行阶段才知道其值的const变量都不能用来定义数组的维度。 2.array 定义后的空间 是固定的了,不能改变;而vector要灵活得多,可再加或减。 3.vector有一系列的 函数操作 ,非常方便使用; array 不提供push

常用 STL 整理

眉间皱痕 提交于 2019-12-02 11:32:02
常用 STL 整理 vector 可变长数组,变长是基于 倍增 的思想 系统为某一个程序分配空间时,有一个特点, 他所需的时间基本上与空间大小无关,只与 申请次数 有关 (即 100 和 1000 没区别,只和请求次数有关) 因此,vector的优化目标是, 减少申请的次数 (优化时间,可以浪费空间) 起初先申请一个 小的空间(例如32),当我们插入到边界的时候,就会申请到 64个空间 然后把 原来的32个元素copy过来,(每一次数组长度不够的时候,就把数组的长度*2,再把原来的 元素copy过来。 假设要申请 n 的数组,起初为 1 ,我们一共会copy 1 + 2 + 4 + 8....+5*10^5 == 10^6 , 因此大概copy的操作是 10^6 ,均摊下来, 尾部插入的操作就是 \(O(1)\) 的,随机插入是 \(O(n)\) 初始化 vector<typename> name; vector<int> a(n); // 初始化大小为n的数组,0~n-1 vector<int> a(n,3); //初始化大小为n的数组,所有值均为3 vector<vector<int> > name; // 定义二维的vector,两维都能动态变长 vecotr<int> a[n]; // 第一维已经固定,第二维才是vector 访问 (1) 通过下标随机访问 范围是 0 ~