vector初始化

STL vector push_back详解

三世轮回 提交于 2019-11-27 11:28:04
vector的push_back操作是将一个元素插入vector的末尾。 源码如下: template <class T, class Alloc = alloc> void YVector::push_back(const T& x) { if (finish != end_of_storage) { construct(finish, x); ++finish; } else { insert_aux(finish, x); } } 函数insert_aux template <class T, class Alloc = alloc> void YVector::insert_aux(iterator position, const T& x) { if (finish != end_of_storage) { construct(finish, *(finish - 1)); ++finish; T copy_x = x; copy_backward(position, finish - 2, finish - 1); *position = copy_x; } else { const size_type old_size = size(); const size_type new_size = old_size == 0 ? 1 : 2 * old_size;

C++ push方法与push_back方法

寵の児 提交于 2019-11-27 11:26:59
【转载他人的文章,下午在搞c++,谢谢共享】 【摘要】 push与push_back是STL中常见的方法,都是向数据结构中添加元素。初识STL,对于添加元素的方法以产生混淆,这里暂对两种方法作出比较分析。此外,本文还将简述push对应的stack与queue系列,常见方法的介绍,以及与push_back相对应的vector系列常见方法介绍。详见下文。 list 也是使用 push_back . 【正文】 push_back 方法介绍 vector::void push_back (const value_type& val); vector::void push_back (value_type&& val); 该函数将一个新的元素加到vector的最后面,位置为当前最后一个元素的下一个元素,新的元素的值是val的拷贝(或者是移动拷贝) vector 常见方法介绍 (1)vector< 类型 > 标识符 ; (2)vector< 类型 > 标识符(最大容量) ; (3)vector< 类型 > 标识符(最大容量,初始所有值); (4) int i[4] = {12,3,4,5}; vector< 类型 > vi(i , i+2); //得到i索引值为3以后的值 ; (5)vector< vector<int> > //vi 定义2维的容器;记得一定要有空格,不然可能会报错

20190814-华为笔试--找到用户i的所有n度好友 C++

倖福魔咒の 提交于 2019-11-27 10:24:11
1.题目描述:   某软件用户共m个人,编号为0~m-1,用r[i][j]表示用户i和j的好友关系,r[i][j]=0说明不是好友,r[i][j]=1~9数值越大关系越好。其次,r[i][j] = r[j][i]。找出i的n度好友。若不存在n度好友则输出-1.   1度好友代表直接好友,2度好友代表好友的好友,,。按照推荐值降序输出好友列表。即r[i][j] = 6,r[j][k]=4,则i的2度好友推荐值为r[i][j]+r[j][k]=10.   输入:第一行T表示T组测试数据;      第二行首先是整数k,接着3*k个整数,用空格隔开,形成<x,y,r[x][y]>的关系对。     示例:2        10 5 2        13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1 6 3 2 9 7 3 4 3 3 5 3 3 8 3 3 9 3 5 8 9 7 8 9         10 0 2        13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1 6 3 2 9 7 3 4 3 3 5 3 3 8 3 3 9 3 5 8 9 7 8 9   输出:输出T行,每行对应每组测试数据 i的n度好友的降序输出。     示例:7 0 4 9        1 5 8 9 2.理解:   使用dp[i][j

STL之vector

微笑、不失礼 提交于 2019-11-27 10:05:49
一、vector与array的区别: array 是静态空间,一旦配置了就不能改变,如果要换个大一点的房子,首先:需要配置一块新空间,然后将元素从旧地址一一搬到新地址,再把原来的空间释放给系统;vector是动态空间,随着元素的加入,它的内部机制就会自行扩充空间以容纳新元素。vector是吃多少用多少; vector实现技术的关键在于:其对大小的控制以及重新配置时的数据移动效率。 二、vector的迭代器: vector 维护的是一个 连续线性空间 ,所以不论其元素型别为何, 普通指标 都可以做为 vector 的迭代器而满足所有必要条件,因为 vector 迭代器所需要的操作行为如 operator*,operator->,operator++,operator--,operator+, operator-,operator+=,operator-= ,普通指标*天生就具备。vector 支援 随机存取 ,而原 生指标正有着这样的能力。所以,vector 提供的是 Random Access Iterators 。 1 1 template<typename T,typename Alloc=alloc> 2 2 class vector 3 3 { 4 4 public: 5 5 typedef T value_type; 6 6 typedef value_type*

STL标准模板库之vector

不问归期 提交于 2019-11-27 08:46:37
目录 vector容器 1)什么是vector 2)如何定义 3)常用的Vector函数 1、容量函数 2、增加函数 3、删除函数 4、迭代器 5、访问函数 6、其他函数及操作 7、算法 STL提供了一组表示容器、迭代器、函数对象和算法的模板。 容器是一个与数组类似的单元,可以存储若干个值。STL容器是同质的,即存储的值的类型相同; 算法是完成特定任务(如对数组进行排序或在链表中查找特定值)的处方; 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针; 函数对象是类似于函数的对象,可以是类对象或函数指针(包括函数名,因为函数名被用作指针)。 STL使得能够构造各种容器(包括数组、队列和链表)和执行各种操作(包括搜索、排序和随机排列) 接下来介绍几种ACMer必须掌握的几个成员 vector容器 1)什么是vector 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组(动态数组),它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。 2)如何定义 //头文件必须包含:

动态规划

两盒软妹~` 提交于 2019-11-27 05:45:25
动态规划 算法总体思想 动态规划算法与分治法类似,其基本思想也是将 待求解问题分解成若干个子问题 。 但是经分解得到的 子问题往往不是互相独立 的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。 如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。 动态规划基本步骤: (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。 实例一、完全加括号的矩阵连乘积 问题可递归定义: (1)单个矩阵是完全加括号的; (2)矩阵连乘积A是完全加括号的 ,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即 A = (BC)。 设有四个矩阵A,B,C,D它们的维数分别是: A = 50*10 , B = 10*40 , C = 40*30 , D = 30*5 总共有五中完全加括号的方式: 例如:((A(BC))D): 10 * 40 * 30 + 10 * 30 * 50 + 50 * 30 * 5 = 34500 给定矩阵{A1, A2, A3,..., An},其中Ai与A(i+1)是可乘的。i = 1,2,3, ..., n - 1。考察这n个矩阵的连乘积A1*A2*A3...An.

63. Unique Paths II 动态规划

百般思念 提交于 2019-11-27 00:33:53
description: https://leetcode.com/problems/unique-paths/ 机器人从一堆方格的左上角走到右下角,只能往右或者往下走 ,问有几种走法,这个加了难度,在矩阵中加了障碍物 Note: Example: Example 1: Input: [ [0,0,0], [0,1,0], [0,0,0] ] Output: 2 Explanation: There is one obstacle in the middle of the 3x3 grid above. There are two ways to reach the bottom-right corner: 1. Right -> Right -> Down -> Down 2. Down -> Down -> Right -> Right answer: class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { if (obstacleGrid.empty() || obstacleGrid[0].empty() || obstacleGrid[0][0] == 1) return 0; int m = obstacleGrid.size(), n =

Java性能优化的50个细节(珍藏版)

时间秒杀一切 提交于 2019-11-27 00:29:37
Java性能优化的50个细节(珍藏版) 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。 2. 尽量避免随意使用静态变量 当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如 public class A{ private static B b = new B(); } 此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。 3. 尽量避免过多过常地创建Java对象 尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度地重用对象,最好能用基本的数据类型或数组来替代对象。 4. 尽量使用final修饰符 带有final修饰符的类是不可派生的。在JAVA核心API中,有许多应用final的例子

LeetCode刷题总结之双指针法

ぃ、小莉子 提交于 2019-11-26 23:09:55
Leetcode 刷题总结 目前已经刷了 50 道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链表里是两个指针,一般能实现 O ( n )的时间解决问题,两个指针的位置一般在第一个元素和第二个元素或者第一个元素和最后一个元素,快指针在前“探路”,当符合某种条件时慢指针向前挪 盛最多水的容器 这道题其实是求最大面积,最大面积取决于较小值。初始时两指针分别位于第一和最后一个元素处,那么明确指针应该向什么方向移动是解题的关键。既然最大面积取决于较小值,那么指针应向较大值方向移动:当指针移动的时候,底在减小,那么假如向较小值方向移,那么由于底变小,高小于等于前一次的高,此时面积肯定小于之前的面积,每一次移动更新一次面积值。 时间:O(n) 空间:O(1) 代码如下: int maxArea(vector<int>& height) { int i=0,j=height.size()-1; int maxA=0; while(j-i>=1) { maxA=max(maxA,(min(height[i],height[j]))*(j-i)); if(height[i]<=height[j]) i++; else j--; } return maxA; } View Code    2.

一维,二维,三维数组,vector 初始化

自闭症网瘾萝莉.ら 提交于 2019-11-26 19:44:27
1. 用memset初始化数组: 1)按照字节赋值 2)头文件在<cstring>中 注:由于memset函数是按照字节赋值的,所以对int型数组用该函数时,只能是0或-1,否则会出错,这里,不管数组是多少维的,语法均为: int dp[84][84][84][2]; memset(dp, 0, sizeof(dp)); //只能赋值0或-1 2. fill 初始化vector和数组: 1)按照变量类型单元赋值,将区间 [first, end) 中的每个单元都赋为同一个值。 2)头文件在<algorithm>中 // fill algorithm example #include <iostream> // std::cout #include <algorithm> // std::fill #include <vector> // std::vector int main () { std::vector<int> myvector (8); // myvector: 0 0 0 0 0 0 0 0 std::fill (myvector.begin(),myvector.begin()+4,5); // myvector: 5 5 5 5 0 0 0 0 std::fill (myvector.begin()+3,myvector.end()-2,8); //