vector初始化

C++ algorithm算法库

佐手、 提交于 2019-11-28 15:20:04
C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在 <algorithm> 中。编程时,只需要在文件中加入 #include<algorithm> 即可方便地使用这些算法。若要用好这些函数,你必须了解以下几个概念: 容器 容器是用来存放各种数据的一个东西, <algorithm> 中的算法是针对容器设计的。因此,不论数据是一些 int , char 还是自定义的 class , <algorithm> 中的函数都可以正确应对。 vector 是最常用的容器。 迭代器 迭代器是与容器进行配套使用的。它的作用是对容器中的元素进行遍历,比如数组的指针就可以看作一种迭代器。迭代器一般支持解引用( operator*() )、自加( operator++() )、相等( operator==() )等操作。 谓词 谓词是用来对 <algorithm> 中的函数进行定制操作的。谓词可以是lambda表达式或是函数/函数指针,并且 <algorithm> 中只有一元谓词和二元谓词,即函数只能接收一个或两个参数。对于需要额外参数的谓词可以使用lambda表达式的捕获功能。 pair 部分算法会有两个返回值, pair 有两个成员 first 和 second ,用来将两个值进行打包返回。 下面的内容主要来源于《C++ Primer

SynchronizedList和Vector的区别

不羁的心 提交于 2019-11-28 13:21:10
Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。 在多线程的场景中可以直接使用Vector类,也可以使用Collections.synchronizedList(List list)方法来返回一个线程安全的List。 那么,到底SynchronizedList和Vector有没有区别,为什么java api要提供这两种线程安全的List的实现方式呢? 首先,我们知道Vector和Arraylist都是List的子类,他们底层的实现都是一样的。所以这里比较如下两个 list1 和 list2 的区别: List<String> list = new ArrayList<String>(); List list2 = Collections.synchronizedList(list); Vector<String> list1 = new Vector<String>(); 一、比较几个重要的方法。 1.1 add方法 Vector的实现: public void add(int index, E element) { insertElementAt(element, index); } public synchronized void insertElementAt(E obj, int

2019 CCPC网络赛

≡放荡痞女 提交于 2019-11-28 13:13:09
一到网络赛,大家都是东亚之光 1001 00:23:46 solved by hl 签到 枚举一下位就行了 #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #include <stack> #include <vector> #include <string> #include <bitset> #include <cstdio> #include <cstdlib> #include <cstring> #include <sstream> #include <iostream> #include <algorithm> #include <functional> using namespace std; #define For(i, x, y) for(int i=x;i<=y;i++) #define _For(i, x, y) for(int i=x;i>=y;i--) #define Mem(f, x) memset(f,x,sizeof(f)) #define Sca(x) scanf("%d", &x) #define Sca2(x,y) scanf("%d%d",&x,&y) #define Sca3(x,y,z) scanf("%d%d%d",&x,

<<C++ Primer>> 第三章 字符串, 向量和数组 术语表

醉酒当歌 提交于 2019-11-28 12:53:27
术语表 第 3 章 字符串, 向量和数组 begin: 是 string 和 vector 的成员,返回指向第一个元素的迭代器。也是一个标准库函数,输入一个数字,返回指向该数字首元素的指针。 缓冲区溢出(buffer overflow): 一种严重的程序故障,主要的原因是试图通过一个越界的索引访问容器内容,容器类型包括 string,vector 和 数组等。 C 风格字符串(C-style string): 以空字符结束的字符数组。字符串字面值是 C 风格字符串,C风格字符串容易出错。 类模板(class template): 用于创建具体类型的模板。要想使用类模板,必须提供关于类型的辅助信息。例如,要定义一个 vector 对象需要指定元素的类型:vector 包含 int 类型的元素。 编译器扩展(compiler extension): 某个特定的编译器为 C++ 语言额外增加的特性。基于编译器扩展编写的程序不易移植到其他的编译器上。 容器(container): 是一种类型,其对象容纳了一组给定类型的对象。 vector 是一种容器类型。 拷贝初始化(copy initialization): 使用赋值号( = )的初始化形式。新创建的对象是初始值的一个副本。 difference_type: 由 stirng 和 vector 定义的一种带符号整数类型

Java Vector解析与ArrayList区别

試著忘記壹切 提交于 2019-11-28 08:45:17
Vector继承了AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable,和ArrayList一致 Vector大致与ArrayList一致,但是有以下几点区别 1 初始化 默认无参构造方法 Vector会初始化一个长度为10的数组,ArrayList在具体调用时再创建数组。 比较之下,ArrayList延迟化加载更节省空间 2 扩容 (grow()) Vector当增量为0时,扩充为原来大小的2倍,当增量大于0时,扩充为原来大小加增量 ArrayList扩充算法:原来数组大小加原来数组的一半 为什么Vector选择了较为浪费空间的方式扩容,我相信C++ Vector和Java Vector的该处原理应该一致, https://www.zhihu.com/question/36538542/answer/67929747 3 线程安全 Vector是线程安全的,ArrayList是非线程安全的 Vector的线程安全包括其内部类如迭代器实现类ListItr 其实最大的区别就是线程安全性,当然如果我们想创建一个线程安全的ArrayList,可以调用Collections.synchronizedList(),得到静态内部类SynchronizedList,利用同步代码块处理ArrayList。

集合

淺唱寂寞╮ 提交于 2019-11-28 06:23:25
集合 回顾 常用类: 1 Date 表示一个瞬间时间 Date date=new Date(); 2 Calendar类日历 Calendar calendar=Calender.getInstance(); calendar.get(Calendar.YEAR); calendar.get(Calender.MONTH); calender.set(); 3 SimpleDateFormat:实现时间和字符串之间的转换。 3.1把日期格式的字符串转成 时间对象 String s="2011-10-1"; SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); Date date=df.parse(s); 3.2把时间转成某种格式的字符串 // 2015/10/1 SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd"); String s=df.format(date); 4 Math数学类 pow(a,b) a的b次方 abs();绝对值 round();四舍五入 random();随机数 0-1 sqrt(); cbrt(); ceil(); //返回大于或等于 参数的最小整数 3.4--> 4 5.0--->5 floor(); //返回小于或等于参数最大整数 2.8

Codeforces Round #601 (Div. 2)

耗尽温柔 提交于 2019-11-28 01:03:39
Codeforces Round #601 (Div. 2) A. Changing Volume 题意:有T组数据,每组数据给两个数 a 和 b ,每次可以对 a 进行( -5 , -2 , -1 , +1 , +2 , +5 )操作中的一种,问从 a 转换为 b 最少需要多少次。 思路:贪心,对a和 b 的差取绝对值,先尽可能多的选操作 5 ,再尽可能多的选操作 2 ,最后再选操作 1 . #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int total,a,b; int num[3]={5,2,1}; cin>>total; while(total--){ cin>>a>>b; long long cha=abs(a-b); int ans=0; if(cha>0){ for(int i=0;i<3;i++){ ans+=cha/num[i]; cha%=num[i]; } } cout<<ans<<endl; } return 0; } View Code B. Fridge Lockers 题目数据范围被修改了,现在改为了m≤n,就很好写了 题意:给n个点,让建m条边,要求每个点至少有2个临边

容器

蓝咒 提交于 2019-11-27 17:16:57
顺序容器 vector 初始化 //初始化一个size为0的vector vector<int> abc; //初始化size,但每个元素值为默认值 vector<int> abc(10); //初始化了10个默认值为0的元素 //初始化size,并且设置初始值 vector<int> cde(10,1); //初始化了10个值为1的元素 int a[5] = {1,2,3,4,5}; //通过数组a的地址初始化,注意地址是从0到5(左闭右开区间) vector<int> b(a, a+5); vector<int> a(5,1); //通过a初始化 vector<int> b(a); 去重复 #include "vector" #include "algorithm" #include "string" class Student { public: int age; std::string name; Student(int age, const char * name) { this->age = age; this->name = name; } bool operator ==(Student& s) { if (this->age == s.age && this->name == s.name) { return true; } return false; } };

vector和list的区别

时间秒杀一切 提交于 2019-11-27 15:50:42
请你说一说vector和list的区别,应用,越详细越好? 1、概念: 1)Vector 连续存储的容器,动态数组,在堆上分配空间 底层实现:数组 两倍容量增长: vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。 如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释放原空间,之前的迭代器会失效。 性能: 访问:O(1) 插入:在最后插入(空间够):很快 在最后插入(空间不够):需要内存申请和释放,以及对之前数据进行拷贝。 在中间插入(空间够):内存拷贝 在中间插入(空间不够):需要内存申请和释放,以及对之前数据进行拷贝。 删除:在最后删除:很快 在中间删除:内存拷贝 适用场景:经常随机访问,且不经常对非尾节点进行插入删除。 2) List 动态链表,在堆上分配空间,每插入一个元数都会分配空间,每删除一个元素都会释放空间。 底层:双向链表 性能: 访问:随机访问性能很差,只能快速访问头尾节点。 插入:很快,一般是常数开销 删除:很快,一般是常数开销 适用场景:经常插入删除大量数据 2、区别: 1)vector底层实现是数组;list是双向 链表。 2)vector支持随机访问,list不支持。 3)vector是顺序内存

C++贪心算法实现马踏棋盘问题

淺唱寂寞╮ 提交于 2019-11-27 14:33:04
C++马踏棋盘的贪心算法 转载请注明: http://blog.csdn.net/l773575310/article/details/53727286 第一次看马踏棋问题时没有想到用贪心算法,结果穷举起来光5*5的棋盘也运行了很久才出来一条路径。然后看了不少关于马踏棋的解法,大体也看懂了,简单的的说,就是 让棋子每次走的下一个位置的出口尽可能少 。 贪心算法在这里体现: 尽可能走出口少的路,因为如果走出口多的路,后面出口少的路越多,越容易走到死路,即没有路可走。 看下图: 假设小马哥在图中的位置,且其他位置都还没有走过,他有6个红色位置可以走 如果他走右下角,那他只有一个出口(绿色的) 如果走左下角那个,那他有3个出口 以此类推:走偏左下角,5个 最后看一下小马哥下一个位置的出口数量: 如果为0说明走到死路,有可能是走完了所有格子,也有可能没有走完,那就需要往回走了(类似弹栈)。 下面就是代码了 首先是一些初始化 //宏定义,宽、高、一共的格子数 #define WIDTH 8 #define HEIGHT 8 #define PLACE_COUNT ((WIDTH)*(HEIGHT)) //放置棋子的位置 typedef struct position { int x; int y; }Position; //马棋可以走的8个方向(相对当前位置) vector