vector初始化

C++标准模板库里面的容器

ぃ、小莉子 提交于 2020-03-23 13:32:09
1. 顺序容器 sequential container 单一类型 元素组成的 有序 集合 优:顺序访问元素快 不足:添加、删除元素性能相对低 非顺序访问元素性能相对低 vector、string、array都是连续的内存空间 容器选择:取决于执行访问的操作多还是插入删除的操作多     ①一般用vector     ②空间开销很重要时,不适用链表如list、forward_list     ③需要随机访问:vector、deque     ④要在中间进行插入、删除:链表类型如list、forwad_list     ⑤只要在头尾插入、删除:deque     ⑥读取输入时要在中间插入,之后要随机访问: 输入时用vector追加数据,在调用sort()函数,以避免在中间添加元素 若必须要在中间插入元素,输入时用list,输入完成后将list的内容保存到vector中 1.1 vector    https://zh.cppreference.com/w/cpp/container/vector (1)vector的增长 vector<int> ivec; cout<<"size:"<<ivec.size()<<endl; cout<<"capacity:"<<ivec.capacity()<<endl; for(int i=0;i<20;i++) { ivec.push_back

C++STL容器之vector

时光怂恿深爱的人放手 提交于 2020-03-20 16:45:53
C++STL容器之vector 一般复试机试默认是C++,不能带模板,所以会用STL是非常重要的,接下来就讲讲STL容器vector的基本用法 vector的定义 使用vector的标准模板,就需要在添加vector的头文件,#include 。定义如下typename是指定义的向量元素类型,name是定义向量的名字。 vector<typename> name vector的初始化 vector<int> a(10); // 定义有10个整形的向量a vector<int> a(10,1)//定义有10个整形的向量a,并且每个元素值都为1 b[] = {1, 2, 3 ,4}; vector<int>a(b, b+4); vector元素访问 可以像数组一样通过元素下标进行访问,下标从0-size()-1 vector<int>a(5,1); for(int i = 0; i < a.size(); i++) printf("%d ", a[i]); 可以通过迭代器访问,迭代器类似于指针 vector<int>a(5,1); vector<int>:: iterator it; for(int it = a.begin(); it != a.end(); it++) printf("%d ", *it); vector元素操作 vector<int> a, b; a.empty(

如何将向量转换为数组

折月煮酒 提交于 2020-03-19 12:44:56
3 月,跳不动了?>>> 如何将 std::vector<double> 转换为 double array[] ? #1楼 vector<double> thevector; //... double *thearray = &thevector[0]; 按照标准可以保证可以使用此 thearray ,但是有一些警告:特别要注意,只有在 thevector 处于范围内时才使用 thearray 。 #2楼 有一个相当简单的技巧,因为此规范现在 保证 向量可以连续存储其元素: std::vector<double> v; double* a = &v[0]; #3楼 向量实际上是皮肤下的数组。 如果具有功能: void f( double a[]); 您可以这样称呼它: vector <double> v; v.push_back( 1.23 ) f( &v[0] ); 您永远不需要将向量转换为实际的数组实例。 #4楼 做什么的? 您需要澄清:您是否需要指向数组第一个元素或数组的指针? 如果要调用期望使用前者的API函数,则可以执行 do_something(&v[0], v.size()) ,其中 v 是 double s的向量。 向量的元素是连续的。 否则,您只需要复制每个元素: double arr[100]; std::copy(v.begin(), v.end(), arr

c++ Primer 第五版习题答案 第三章

给你一囗甜甜゛ 提交于 2020-03-18 04:43:17
3.2 编写程序,从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词。 void readByLine () { string line; while (getline (cin, line)) { cout << line << endl; } } void readByWord () { string word; while (cin >> word) { cout << word << endl; } } 3.3 说明string类的输入运算符和getline函数分别是如何处理空白字符的。 输入运算符会自动忽略字符串前的空白(空格、制表符、换行等),从第一个真正的字符到下一个空白。 getline函数会保存字符串中的空白,读入数据直到遇见换行符。 3.4 编写程序,读入两个字符串,比较其是否相等并输出结果。如果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串。 void compareString () { string s1, s2; cin >> s1 >> s2; if (s1 == s2) { cout << "equal" << endl; } else if (s1 > s2){ cout << s1 << endl; } else { cout << s2 << endl; } } void

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

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

有哪些Java性能优化方法?

醉酒当歌 提交于 2020-03-11 13:35:49
面试官:“有性能优化经验没?” 应聘者:“有一点。” 面试官:“那你们从哪些方面做了优化?” 应聘者:“sql优化、JVM参数调优、JAVA代码性能优化。。” 面试官: “谈谈编写Java代码时有哪些优化方法?" 应聘者:“bala。bala。bala。。” 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生,以达到节约资源的目的; 第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。 2. 尽量避免随意使用静态变量 当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如 public class A{private static B b = new B();} 此时静态变量b的生命周期与A类同步,如果A类不会卸载,那么b对象会常驻内存,直到程序终止。 3. 尽量避免过多过常地创建Java对象 尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象

05_泛型编程与STL之黑马程序员day05

拈花ヽ惹草 提交于 2020-03-10 14:01:24
#2020/03/10 day01至day05完结 1.map容器 此处不再对函数具体介绍,可进入 Cpp参考 # include <iostream> # include <map> using namespace std ; //map容器初始化 void test01 ( ) { //map容器模板参数,第一个参数key的类型,第二参数value类型 map < int , int > mymap ; //插入数据 pair.first key值 piar.second value值 //第一种 pair < map < int , int > :: iterator , bool > ret = mymap . insert ( pair < int , int > ( 10 , 10 ) ) ; //iterator表示插入的位置 if ( ret . second ) { cout << "第一次插入成功!" << endl ; } else { cout << "插入失败!" << endl ; } ret = mymap . insert ( pair < int , int > ( 10 , 20 ) ) ; if ( ret . second ) { cout << "第二次插入成功!" << endl ; } else { cout << "插入失败!" <<

第三章 字符串、向量和数组

牧云@^-^@ 提交于 2020-03-07 11:04:58
3.2 1 #include <iostream> 2 #include <string> 3 4 using std::cin; 5 using std::cout; 6 using std::endl; 7 using std::string; 8 9 int main() 10 { 11 string line; 12 while (getline(cin, line)) 13 cout << line << endl; 14 return 0; 15 } 一次读入一行 1 #include <iostream> 2 #include <string> 3 4 using std::cin; 5 using std::cout; 6 using std::endl; 7 using std::string; 8 9 int main() 10 { 11 string word; 12 while (cin >> word) 13 cout << word << endl; 14 return 0; 15 } 一次读入一个单词 3.3 输入运算符:自动忽略string类对象开头的空白(即空格符、换行符、制表符等),并从第一个真正的字符开始读起,直到遇见下一处空白为止。 getline函数:从给定的输入流中读入内容,直到遇到换行符为止(换行符也被读进来了)

C++ STL之vector用法总结

北战南征 提交于 2020-03-07 02:54:34
来源:https://www.cnblogs.com/zhonghuasong/p/5975979.html 介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。 vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。 与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效

C++ STL之list容器的基本操作

时间秒杀一切 提交于 2020-03-06 11:47:56
由于list和vector同属于序列式容器,有很多相同的地方,而上一篇中已经写了vector,所以这一篇着重写list和vector的不同之处和特有之处。 特别注意 的地方: (1)STL中迭代器容器中都要注意的地方(vector中已经提到): 1)任何时候同时使用两个迭代器产生的将会是一个 前闭后开 的区间(具体见插入和删除的例子) 2)begin()指向的是vec中的第0个元素,而 end是指向最后一个元素的后面一个位置 (不是最后一个元素) 3) 迭代器的时效性 ,如果一个迭代器所指向的内容已经被删除,而后又使用该迭代器的话,会造成意想不到的后果 (2) list的迭代器是双向迭代器 (只能++ --,没有偏移功能)而不是像 vector那样的随机迭代器 (和指针几乎一样的所有功能) (3)list和vector的区别,本质区别:list是链式存储,vector在内存中是连续区别的,有本质区别而导致下面区别 1)list不支持随机访问(2)中已经说明,vector可以像数组那样使用平[]访问元素,而list是不可以的 2) list的插入和删除效率很高,所以list有push_front、pop_front、sort而vector中这些操作的效率太低了,所以STL中没有写这些功能 3)list的一些特有的函数remove、reverse、unique、splice