vector初始化

STL 常用方法

我是研究僧i 提交于 2020-01-11 08:43:27
1. 选择 C++ 刷算法的理由 1、C++ 速度快(C 不是更快吗,Java 太慢了) 2、C++ 有 STL(什么是 STL)——性能强大,使用方便的标准库 3、如何使用 STL 进行高效刷算法 4、好处:刷算法,学习成本低 5、如何从 C 到 C++(仅基础语法到刷算法程度) 俗话说:磨刀不误砍柴工,不会 C++ 仍然可以刷算法,但是效率相对很低。在 ACM 或各类程序算法竞赛中相比于 Java 代码的冗长,C 的繁琐,Python 的性能低下,C++ 以兼顾简洁和高效脱颖而出。 2.输入输出 C++ 保留了 C 的 scanf 和 printf,额外增加了 cin 和 cout。 Example: 2.1 C 程序中的输入输出 int a; scanf("%d", &a); printf("%d", a); 2.2 C++ 程序中的输入输出 int a; cin >> a; cout << a; 2.3 C++ 程序中的连续输入输出 int a, b, c; cin >> a >> b >> c; cout << a << b << c; 2.4 C++ 优雅地换行 cout << 1; cout << endl; cout << 2; cout << 3 << endl << endl; Notice: cin、cout 使用虽然很方便,但是比 scanf、printf

vector 的resize 和 reserve

拈花ヽ惹草 提交于 2020-01-10 22:43:23
首先声明,都是转载的,理解知识为主要目的。 http://www.cnblogs.com/zahxz/archive/2013/02/20/2918711.html C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。 标准库vector类型使用需要的头文件:#include <vector>。vector 是一个类模板。不是一种数据类型,vector<int>是一种数据类型。Vector的存储空间是连续的,list不是连续存储的。 一、 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5; vector<typeName>v2(v1); 或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。 vector< typeName > v3(n,i);//v3包含n个值为i的typeName类型元素 vector< typeName > v4(n); //v4含有n个值为0的元素 int a[4]={0,1,2,3,3}; vector<int>

C++ Vector知识点

僤鯓⒐⒋嵵緔 提交于 2020-01-08 20:36:12
定义 vector:向量( 动态数组 )是连续的空间,空间不够用的,会申请一个更大的连续的空间,同时迭代器 失效 头文件 #include < vector > Using namespace std; 定义向量的对象 1.可以为 int,double,char (本质和string一样) void STLDefine ( ) { vector < int > vec ; } 2.可以为 结构体 void STLDefine ( ) { struct STU { int age ; } ; vector < struct STU > vec ; } 3.可以为 指针 void STLDefine ( ) { vector < int * > vce ; } 4.可以放对象 普通类对象 其他容器的对象 void STLDefine ( ) { vector < string > vec ; //相当于一个字符串数组 } 构造函数 无参数的构造 n个元素 用num个val来初始化容器 用另一个vector对象初始化当前的vector对象 迭代器初始化 void STLConstructor ( ) { vector < int > vec ; //无参数 vector < int > vec1 ( 5 ) ; //5个元素,均初始化为0 vector < int > vec2 ( 5

使用硬编码元素初始化std :: vector的最简单方法是什么?

浪尽此生 提交于 2020-01-07 19:00:53
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我可以创建一个数组并像这样初始化它: int a[] = {10, 20, 30}; 如何创建一个 std::vector 并初始化它同样优雅? 我知道的最好方法是: std::vector<int> ints; ints.push_back(10); ints.push_back(20); ints.push_back(30); 有没有更好的办法? #1楼 最简单的方法是: vector<int> ints = {10, 20, 30}; #2楼 “我如何创建一个STL向量并像上面那样对其进行初始化?以最小的打字工作量,最好的方法是什么?” 在初始化内置数组时初始化向量的最简单方法是使用 C ++ 11中引入 的初始化列表。 // Initializing a vector that holds 2 elements of type int. Initializing: std::vector<int> ivec = {10, 20}; // The push_back function is more of a form of assignment with the exception of course //that it doesn't obliterate the value of the

vector C++ 详细用法

强颜欢笑 提交于 2020-01-07 17:45:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原文地址::http://blog.csdn.net/edify/article/details/4035243 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。   为了可以使用vector,必须在你的头文件中包含下面的代码:   #include <vector>   vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:   using std::vector;   vector<int> vInts;   或者连在一起,使用全名:   std::vector<int> vInts;   建议使用全局的命名域方式:using namespace std;   函数   表述   c.assign(beg,end)c.assign(n,elem)   将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。   c.at(idx)   传回索引idx所指的数据,如果idx越界,抛出out_of_range。   c.back()   传回最后一个数据

STL vector用法介绍

两盒软妹~` 提交于 2020-01-07 17:17:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 介绍 这篇文章的目的是为了介绍 std::vector ,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在 remove_if() 和 for_each() 中的使用。通过阅读这篇文章读者应该能够有效地使用 vector 容器,而且应该不会再去使用 C 类型的动态数组了。 Vector 总览 vector 是 C++ 标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector 之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说, vector 是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用 vector ,必须在你的头文件中包含下面的代码: # include <vector> vector 属于 std 命名域的,因此需要通过命名限定,如下完成你的代码: using std::vector; vector< int > vInts; 或者连在一起,使用全名: std::vector< int > vInts; 建议使用全局的命名域方式: using namespace std; 在后面的操作中全局的命名域方式会造成一些问题。 vector 容器提供了很多接口,在下面的表中列出

转:STL提供了三个最基本的容器:vector,list,deque

狂风中的少年 提交于 2020-01-05 05:41:00
vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。 list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,因此它没有提供[]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。 deque是一个double-ended queue,它的具体实现不太清楚,但知道它具有以下两个特点:它支持[]操作符,也就是支持随即存取,并且和vector的效率相差无几,它支持在两端的操作:push_back、push_front、pop_back、pop_front等,并且在两端操作上与list的效率也差不多。 因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

vector的主要操作

…衆ロ難τιáo~ 提交于 2020-01-05 05:30:45
vector常用方法 assign() 对Vector中的元素赋值 void assign( input_iterator start, input_iterator end ); // void assign( size_type num, const TYPE &val ); reserve() 设置Vector最小的元素容纳数量 函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size) resize() 改变Vector元素数量的大小 函数改变当前vector的大小为size,且对新创建的元素赋值val swap() 交换两个Vector capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) max_size() 返回Vector所能容纳元素数量的最大值(译注:包括可重新分配内存). size() 返回Vector元素数量的大小 get_allocator() 返回vector的内存分配器 http://blog.csdn.net/qingqinglanghua/article/details/5035763 vector.reserve(size)和vector.resize(size,t*)的区别 reserve 是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素

vector中resize()和reserve()的区别

江枫思渺然 提交于 2020-01-05 05:30:31
先看看《C++ Primer》中对resize()函数两种用法的介绍: 1、resize(n) 调整容器的长度大小,使其能容纳n个元素。 如果n小于容器的当前的size,则删除多出来的元素。 否则,添加采用值初始化的元素。 2、 resize(n,t) 多一个参数t,将所有新添加的元素初始化为t。 而reserver()的用法只有一种 reserve(n) 预分配n个元素的存储空间。 了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。 size指容器当前拥有的元素个数; 而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。 也可以说是预分配存储空间的大小。 resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。 至于是否影响capacity,取决于调整后的容器的size是否大于capacity。 reserve()函数和容器的capacity息息相关。 调用reserve(n)后,若容器的capacity<n,则重新分配内存空间,从而使得capacity等于n。 如果capacity>=n呢?capacity无变化。 从两个函数的用途可以发现,容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。 而reserve()函数预分配出的空间没有被初始化,所以不可访问。

C++:vector中的resize()函数 VS reserve()函数

帅比萌擦擦* 提交于 2020-01-05 05:30:17
http://www.cplusplus.com/reference/vector/vector/vector/ 写代码的时候无意错用了这两个函数 导致测试的时候,程序运行崩溃 发现这两个函数还是有区别的 void reserve (size_type n); reserver函数用来给vector 预分配 存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate内存 capacity的值会大于或者等于n 。这样,当ector调用push_back函数使得size 超过原来的默认分配的capacity值时 避免了内存重分配开销。 需要注意的是:reserve 函数分配出来的内存空间,只是表示vector可以利用这部分内存,但vector不能有效地访问这些内存空间,访问的时候就会出现越界现象,导致程序崩溃。 void resize (size_type n); void resize (size_type n, value_type val); resize函数 重新分配 大小, 改变容器的大小,并且创建对象 当n小于当前size()值时候,vector首先会减少size()值 保存前n个元素,然后将超出n的元素删除(remove and