vector初始化

vector用法整理

柔情痞子 提交于 2020-02-08 13:00:31
vector常被称为容器,因为vector容纳着其他元素,所有元素的类型都相同。每个元素都有一个与之对应的索引,索引用于访问元素。简单地说,vector是一个能存放许多类型数据的动态数组,其元素的位置在内存中是连续的。 包含头文件: #include <vector> using namespace std; vector是类模板,实例化时需要提供vector内所存放对象的类型: vector<int> ivec; vector<string> file; 定义和初始化vector对象 vector<T> v1;//v1是一个空vector,它潜在的元素是T类型 vector<T> v2(v1);//等价于vector<T> v2=v1 vector<T> v3(n,val);//v3包含了n个元素,每个都为val vector<T> v4(n);//v4有n个执行了值初始化的元素 vector<T> v5{a,b,c,d……};//v5包含了初始值个数的元素,每个元素被赋予相应的初始值,等价于vector<T> v5={a,b,c,d……} vector<T> v1,v1不含任何元素,是一个空的容器,看起来似乎没什么用,但是程序在运行时可以很高效地往vector中添加元素,事实上这是一个常用的方法,比定义了容器大小的更为高效。 列表初始化还是元素数量? vector<T> v1

C++语法基础之栈和队列

拈花ヽ惹草 提交于 2020-02-08 08:26:49
栈 头文件 < stack > 实例化 stack在内部默认使用 std::deque 存储数据,但是可以指定使用vector或者list存储数据 示例: std :: stack < int > numsInStack ; std :: stack < double , vector < double >> doublesStackedInVec ; //指定使用vector实现 可以使用一个栈初始化另一个 成员函数 push() pop() empty() size() top() emplace() swap() Exchanges the contents of the container adaptor by those of x. parameter:Another queue container adaptor of the same type (i.e., instantiated with the same template parameters, T and Container). Sizes may differ. 注意:不能修改栈中元素 队列 头文件 < queue > 实例化 默认使用deque存储数据,可设置为list,vector 实例化与初始化的方法与栈类似 成员函数 push() pop() 删除队首元素 front() back() empty(

leetcode刷题记录(三)

半世苍凉 提交于 2020-02-06 06:19:14
前K个高频元素 题目地址 知识点:堆排序,元素频数统计 解题思路:使用map统计元素出现频次,之后可以对词频排序,由于题目要求小于nlogn得时间复杂度,可以选择堆排序。排序也可以用lambda函数自定义 struct cmp { bool operator ( ) ( pair < int , int > a , pair < int , int > b ) { return a . second < b . second ; } } ; class Solution { public : vector < int > topKFrequent ( vector < int > & nums , int k ) { map < int , pair < int , int >> freq ; for ( int num : nums ) { if ( ! freq . count ( num ) ) freq [ num ] = { num , 0 } ; freq [ num ] . second ++ ; } priority_queue < pair < int , int > , vector < pair < int , int >> , cmp > pq ; for ( auto & p : freq ) { pq . push ( p . second ) ; }

vector二维数组用法

若如初见. 提交于 2020-02-06 03:11:20
Title 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 Code # include <iostream> # include <vector> # include <string.h> using namespace std ; int main ( ) { int n ; while ( cin >> n ) { int flag , i , j ; cin >> flag ; string name ; int score ; vector < vector < string > > students ( 101 , vector < string > ( ) ) ; for ( int i = 0 ; i < n ; i ++ ) { cin >> name >> score ; students [ score ] . push_back ( name ) ; //已按score排好序 } if ( flag ) { for ( i = 0 ; i < students . size ( ) ; i ++ ) { for ( j = 0 ; j < students [ i ] . size ( ) ; j ++ ) cout << students [ i ] [ j ] << " " << i <<

vector初始化的几种方式

三世轮回 提交于 2020-02-06 00:43:49
(1)第一种:类似于数组的方式: std :: vector < std :: string > strArray ( 10 ) ; strArray [ 0 ] = "hello" ; strArray [ 1 ] = "world" ; strArray [ 2 ] = "this" ; strArray [ 3 ] = "find" ; strArray [ 4 ] = "gank" ; strArray [ 5 ] = "pink" ; strArray [ 6 ] = "that" ; strArray [ 7 ] = "when" ; strArray [ 8 ] = "how" ; strArray [ 9 ] = "cpp" ; (2)第二种:push_back的方式: vector < string > strArray ; strArray . push_back ( "hello" ) ; strArray . push_back ( "world" ) ; strArray . push_back ( "this" ) ; strArray . push_back ( "find" ) ; strArray . push_back ( "gank" ) ; strArray . push_back ( "pink" ) ; strArray . push

《c++primer》笔记 第3章 字符串、向量和数组

廉价感情. 提交于 2020-02-03 09:52:04
标准库类型 本章重要的两个: string 和 vector ,以及配套的迭代器。 3.1 命名空间的using声明 using声明具有如下的形式: using namespace::name; 一旦声明了上述语句,就可以直接访问命名空间中的名字: #include<iostream> //using声明,当我们使用名字cin时,从命名空间std中获取它 using std::cin; int main() { int i; cin >> i;//正确:cin和std::cin含义相同 cout << i;//错误:没有对应的using声明,必须使用完整的名字 std::cout << i;//正确:显式地从std中使用cout return 0; } 用下面的using可以使用std里面的所有名字: using namespace std; 头文件不应包含using声明 3.2 标准库类型string 初始化string对象的方式 string s1; //默认初始化,si是一个空串 string s2(s1); //s2是s1的副本 string s2=s1; //等价于s2(sl>,s2是s1的副本 string s3("value"); //S3是字面值"value"的副本,除了字面值最后的那个空字符外 string s3="value"; //等价于s3("value")

c++ vector

梦想与她 提交于 2020-02-01 06:06:51
文章目录 1.关于vector 2.定义、初始化 3.插入元素 4.删除元素 5.遍历元素 6.翻转和排序 7.注意问题 7.1删除元素 7.2增加元素 1.关于vector vector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性表,寻找元素非常快,但是插入元素的时间却很大(list是一个双向链表,在同一个位置插入大量的数据时速度很快,但是查找的速度就会慢很多) 和普通数组一样可以通过下标索引来进行访问 与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。 缺点:当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。(比普通的数组具有更高的时间复杂度和空间复杂度) 2.定义、初始化 几种定义核初始化的方法: vector < int > vec ; //声明一个int型向量 vector < int > vec1 ( 4 , 1 )

Power up C++ with the Standard Template Library: Part I[翻译]

隐身守侯 提交于 2020-01-31 12:39:35
Power up C++ with the Standard Template Library: Part I 【原文见: http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=standardTemplateLibrary 】 作者 By DmitryKorolev Topcoder 成员 翻译 农夫三拳@seu Containers Before we begin Vector Pairs Iterators Compiling STL Programs Data manipulation in Vector String Set Map Notice on Map and Set More on algorithms String Streams Summary 也许你已经使用C++作为主要编程语言来解决Topcoder中的问题了,这就意味着你已经在简单的使用 STL了,因为数组和字符串都是以STL对象的方式传入到你的函数中的。也许你已经注意到了,有许多 程序员他们写代码要比你快并且代码也比你的简洁。 也许你不是一个C++程序员,但是因为C++的强大功能以及它的库(或者因为你在Topcoder practice 房间和比赛里面看到的简短的解决方案),你想成为一个这样的程序员。 不管你来自哪里,这篇文章将会帮助你掌握它

C++之Vector的使用

孤人 提交于 2020-01-31 02:27:36
C++语法学习 Vector 使用说明 Vector代表是一个封装了动态大小数组的顺序容器,也就是一个 动态数组(变长数组) 可以简单的认为,向量是一个能够存放 任意类型 的动态数组。 引用: #include < vector> 。下文统一采用的万能头,就不一一引用了 初始化 # include <iostream> # include <bits/stdc++.h> using namespace std ; int main ( ) { vector < int > a ; //声明一个int型的动态数组a vector < int > a ( 10 ) ; //声明一个初始大小为10的动态数组,输出后会发现会有默认值 vector < int > a ( 10 , 1 ) ; //声明一个初始大小为10且初始值都为1的动态数组 vector < int > b ( a ) ; // 声明并用数组a初始化数组b;复制a数组 vector < int > b ( a . begin ( ) , a . begin ( ) + 3 ) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值 } 增加函数 # include <iostream> # include <fstream> # include <bits/stdc++.h> using namespace

Vector && String

自古美人都是妖i 提交于 2020-01-30 15:21:11
在需要动态分配数组时,考虑使用vector或string代替数组。大部分情况下,vector或string都可以完全替代Array。但当有性能要求时,基于引用计数实现的string则有可能无法满足要求。多线程环境下,基于引用计数实现的string存在性能隐忧,考虑禁用引用基数或者采用vector<char>代替。 利用reserve(size_t n)减少频繁reallocation开销。 对于Vector而言: 1 vector < int > v; 2 v.reserve( 1000 ); 3 for ( int i = 0 ; i < 1000 ; ++ i ) 4 v.push_back(i); 当然,这种方法只能在可以确切的或大概预计出需要多大容量的情况下使用。但如果事先无法预计,则可预先分配尽可能大的空间来容纳所需的元素。当添加完所有元素后,采用"Swap trick"裁减掉多余的空间 (Shrink-to-fit: reduction in capacity)。 Swap Trick: 1 vector < int > v; 2 3 vector < int > (v).swap(v); vector<int>(v)创建一个临时vector,该vector包含了v中所有int元素。创建临时vector调用vector的拷贝构造函数