vector初始化

C/C++基础----string, vector, array

二次信任 提交于 2020-01-30 15:16:09
1 using声明 方便使用命名空间中的成员,不用每次xxx::yyy 头文件不应该包含using声明(不经意间包含了一些名字) 2 string 表3.1:初始化string对象的方式 string s1 默认初始化,s1是空串 string s2(s1) s2是s1的副本 string s2 = s1 等价于s2(s1) string s3(“value”) s3是字面值”value”的副本,除了最后空格符 string s3 = “value” 等价于s3(“value”) string s4(n, ‘c‘) s4初始化为有连续n个字符c组成的串 表3.2:string的操作 os<<s 将s写到输出流os当中,返回os is>>s 从is中读取字符串赋给s,遇到空白结束,返回is getline(is, s) 从is中读取一行赋给s,返回is s.empty() s为空返回true s.size() 返回s中字符的个数 s[n] 返回s中第n个字符的引用,n从0开始计起 s1+s2 返回s1和s2链接后的结果 s1=s2 用s2的副本代替s1中原来的字符 s1==s2 s1!=s2 <, <=, >, >= string对象会自动忽略开头的空白(即空格符、换行符、制表符)并从第一个真正的字符开始读起,知道遇到下一处空白为止。 getline保留输入时的空白符

【校招面试 之 C/C++】第20题 C++ STL(二)之Vector

痴心易碎 提交于 2020-01-30 00:52:05
1、vector的动态增长   当添加元素时,如果vector空间大小不足,则会 以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来 , 在新空间的内容末尾添加元素,并释放原空间 。vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是 线性连续 分配的,不能保证原空间之后有可供配置的空间。因此,对vector的任何操作,一旦引起空间的重新配置, 指向原vector的所有迭代器就会失效 。 vector的size(),capacity(),reserve(),resize()函数: vector对象的内存布局如下图所示: start迭代器指向已用空间的首元素,finish指向已用空间的尾元素的下一个位置,end_of_storage指向可用空间的末尾。 size()函数返回的是已用空间大小,capacity()返回的是总空间大小,capacity()-size()则是剩余的可用空间大小。当size()和capacity()相等,说明vector目前的空间已被用完,如果再添加新元素,则会引起vector空间的动态增长。 由于动态增长会引起重新分配内存空间、拷贝原空间、释放原空间,这些过程会降低程序效率。因此,可以使用reserve(n)预先分配一块较大的指定大小的内存空间,这样当指定大小的内存空间未使用完时

C++ STL之vector用法总结

混江龙づ霸主 提交于 2020-01-30 00:49:38
C++ STL之vector用法总结 介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。 vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。 与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward

STL之vector

痞子三分冷 提交于 2020-01-30 00:43:08
vector STL vector的内部实现原理及基本用法 初始化vector对象的方式: vector v1; //未指定初始化方式,因此采用默认方式初始化v1,即长度为0的空容器; vector v2; //定义对象v2,作为v1的副本; vector v3(n,i);//定义对象v3,它包含n个数值为i的元素; vector v4(n); //定义对象v4,v4中包含n个元素,每个元素的值均是0; 其中:T可以为int,float,char,char*(存放字符串或字符指针)。一般用于int动态数值时,定义vector v1,用v1来保存数值元素。 vector的常用函数:只需要包含#include 即可 empty():判断vector向量是否为为空,为空时返回真,否则返回假; begin():返回向量(数组)的首元素的地址; end():返回向量(数组)的末尾元素的下一个元素(不存在的元素)的地址; clear():清空向量; front():返回向量(数组)的第一个元素的数据; back():返回向量(数组)的最后一个元素的数据; size():返回向量中元素的个数(即数组长度) push_back(数据i):将数据插入到向量的尾部; pop_back():删除向量尾部的数据 // vector_base.cpp : 定义控制台应用程序的入口点。 // #include

vector与数组的习惯用法

喜夏-厌秋 提交于 2020-01-29 04:02:32
vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 : #include <vector> 使用vector有两种不同的形式,即所谓的 数组习惯 和 STL习惯 。 一、数组习惯用法 1. 定义一个已知长度的 vector : vector< int > ivec ( 10 ); //类似数组定义int ia [ 10 ]; 可以通过ivec[ 索引号 ] 来访问元素 使用 if ( ivec.empty() ) 判断是否是空, ivec.size() 判断元素个数。 2. vector的元素被初始化为与其类型相关的缺省值: 算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得 ,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如 vector< int > ivec( 10, -1 ); 定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1 对于内置数组 我们可以显式地把数组的元素初始化为一组常量值,例如 : int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 }; 我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分

C++ primer 笔记(一)

。_饼干妹妹 提交于 2020-01-28 08:22:47
第1章 >> << 输入输出操作符返回 输出流std::cin, std::cout本身 endl输出换行,刷新与设备关联的buffer augument 实参 paremeter 形参 buit-in type 内置类型 manipulator 操纵符 第2章 C++是静态类型语言,编译时执行类型检查 wchar_t =L'a' 16位 float 6位有效数字 double 至少10位有效数字 long double 至少10位有效数字 赋值:对于unsigned越界赋值,结果等于该值对unsigned可能取值个数求模 例如:unsigned char c=336; //实际c=336%256=80 unsigned char c=-1; //实际c=-1%256=255 对于signed越界赋值,由编译器决定实际值 初始化不是赋值,初始化指创建变量并赋值,赋值是擦出当前值赋新值 内置类型初始化:在函数体外定义的变量初始化为0,函数体内定义的不自动初始化。 定义:分配存储空间,还可以指定初值 声明:向程序表明变量的类型,名字 extern声明:当有初始化式时则为定义 非const变量默认为extern,要使const变量能在其他文件中访问,则需显式指定为extern。const默认为定义它的文件的局部变量。 引用必须在定义时初始化,引用一经初始化,就始终指向同一个特定对象。

C++ STL vector 不想初始化长度怎么办

…衆ロ難τιáo~ 提交于 2020-01-27 20:20:39
vector方便的地方就在于不用在意长度的限制,但是如果一开始为vector读取输入的时候,我们没有初始化vector大小的话,很容易出现下标越界的情况,然后程序不跑了。。。 有时候未知输入的长度时,vector开小了怕越界,开大了怕浪费 解决方法 使用 vector 的 insert 方法,这样一来vector会自动地增加自己的长度了,防止越界 // 在尾部直接插入元素 x v . insert ( v . end ( ) , x ) ; # include <iostream> # include <vector> using namespace std ; int main ( ) { vector < int > v ; int x ; for ( int i = 0 ; i < 4 ; i ++ ) { cin >> x ; v . insert ( v . end ( ) , x ) ; } for ( int i = 0 ; i < 4 ; i ++ ) { cout << v [ i ] << endl ; } return 0 ; } 运行结果: 来源: CSDN 作者: AkagiSenpai 链接: https://blog.csdn.net/weixin_44176696/article/details/104094252

hdu4841

社会主义新天地 提交于 2020-01-26 22:16:19
今天天气确实很好! 接下来是圆桌问题,顺便做个vector容器的笔记方便以后复习。嘿嘿 Problem Description 圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。 Input 多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767); Output 对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。 Sample Input 2 3 2 4 Sample Output GBBG BGGB #include <iostream> #include <vector> #include <list> using namespace std; vector<int> vec; int main() { int n,m; while(cin>>n>>m){ int pos=0,i;//pos查询坏人下标 for(i=0;i<2*n;i++){ vec.push_back(i); } //用resize后,无法记录好人坏人下标

C++基础内容复习

陌路散爱 提交于 2020-01-26 09:50:31
下列语句定义了5个变量: int count; double sales_price,sum; std::string title; Sales_item bookItem; 每个定义都是以 类型说明符 开始,如上int、double、std::string、Sales_item都是类型名,其中int和doubleshi是 内置类型 ,std::string是 标准库定义的类型 (需要#include <string>), Sales_item是 自定义类型 。 ::作用域操作符,含义是右操作符的名字可以在左操作数的作用域中找到 简化std::string 的写法是使用using。 比如使用using std::string; using std:cin;之后,在下面的代码中就可以直接使用string和cin了。 当进行string对象和字符串字面量混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。 比如,如下s1的初始化时正确的 string item ="what a mess!"; string s1 =item +","; 但是:string s1 ="what a mess!" +","; 就会报错,这个和C#是 完全不一样 的。 虽然任何整数数值都可以作为索引,但是索引的实际数据类型却是unsigned类型的string::size_type

C++动态数组(vector)

馋奶兔 提交于 2020-01-26 05:23:56
动态数组简介 有时候,我们在做题时会思考数组到底应该有多大才合适,有时可能不得而知。所以希望能够在运行时具有改变数组大小的能力。这也就出现了所谓的动态数组,动态数组是指在声明时没有确定数组大小的数组。动态数组可以在任何时候改变大小,既灵活又方便,有助于有效管理内存。 但是大部分情况下,我们还是使用静态数组的,尤其是在打比赛的时候。但是有时如果我们用静态数组空间会炸,所以只好用动态数组。但是动态数组又不太好写,因此C++的SLT给出了一个容器vector来帮助我们。 vector容器 所在头文件: vector 定义:(其中Type为类型,如int,char,结构体,string等等) vector < Type > v ; //默认初始化 v为空 vector < Type > v ( v1 ) ; //用v1定义v vector < Type > v ( n ) ; //v有n个值为0的元素 vector < Type > v ( n , x ) ; //v有n个值为x的元素 vector < Type > v [ MAXN + 10 ] ; //第一维大小是(MAXN + 10),第二维是动态的二维数组 常用操作: v [ i ] ; //v的第i个元素 v . clear ( ) //清空v v . push_back ( x ) ; //在尾部添加元素 v . pop