C++中STL容器类型做函数不使用引用导致程序效率下降

最近刷算法题,发现一个问题:

我是用递归实现一个算法,但在函数TreeNode * createTree(vector<int> &num, int left, int right)

一开始使用了TreeNode * createTree(vector<int> num, int left, int right),结果总是超时,

在网上找了一些别人写的算法,发现都是那样实现的,最后发现了是函数的参数类型不同,

别人使用vector类型做参数时,传递的是引用,而我直接使用了函数的形参,从而导致,每次函数递归,都要将整个num数组的值都要复制,从而大大影响了程序的效率

最后改成了使用引用,结果程序效率大大提高!

总结:

在c++中,涉及到vector, queue, stack等做参数时,一定要使用&做参数,否则需要进行数据的拷贝,导致整个程序的效率下降很多!

时间: 2024-09-28 15:33:18

C++中STL容器类型做函数不使用引用导致程序效率下降的相关文章

关于vs中 “错误 类型“xxxx”在未被引用的程序集中定义。必须添加对程序集“xxxx”的引用。”的解决方法。

错误  类型“xxxx”在未被引用的程序集中定义.必须添加对程序集“xxxx”的引用. 1.先检查解决方案的框架版本是否是你需要编译的版本(解决方案--> 右键-->属性-->应用程序-->目标框架). 2.在解决方案资源管理器中右键单击-->引用-->添加引用--> 程序集-->在搜索框中搜索需要引用的程序集“System.xxxx”,选择与解决方案目标框架相匹配的版本进行引用即可.

STL容器的reserve()函数和resize()函数解析

以vector为例,我们都知道可以用reserve()和resize()函数来为容器预留空间或者调整它的大小. 不过从它俩的名字上可以看出区别: reserve():serve是"保留"的词根,所以是用来保留,预留容量的,并不改变容器的有效元素个数. resize():size是"大小"的意思,它主要用来调整容易有效元素的个数,有时候也会造成容量变大. 先解释两个概念: 容量:即capacity,是指容器在自由内存中获得了多大的存储空间,容量为100并不代表容器就有

c++中STL容器中的排序

1.c++STL中只有list自带了排序函数: (1).若list中存放的是int类型或者string类型,直接利用sort即可: list <int> list1; list1.sort(); 此时默认为升序,若要使用降序,直接自定义cmp函数即可. (2).若存放的是结构体或其他指针类型,需要自己定义比较结构体: struct student { int num;}; struct node { bool operator()(student a,student b) return a.n

【Python基础】12_Python中的容器类型公共方法

1.Python中的内置函数 注:比较两个值,使用 <. >. == 2.切片 注:字典是一个无序集合,不能切片 3.运算符 字典中的in .not in  对字段操作时,只能判断字典的key 注:+ .extend().append()比较 4.完整的for循环,for-else 定义 for 变量 in 集合: 循环体代码 else: 没有通过break退出循环,循环结束后,会执行的代码 原文地址:https://www.cnblogs.com/dujinyang/p/11262873.h

C++笔记(6):标准模板库STL:容器、迭代器和算法

STL(Standard Template Library)是C++标准库的一部分.STL的代码从广义上讲分为三类:容器.迭代器和算法. 1.容器 2.迭代器 3.算法  -------------------------------------------------------------------------------------------------------------------------- 1.容器 顺序容器容器是特定类型对象的集合.顺序容器为程序员提供控制元素存储和访问

条目1《慎重选择容器类型》

条目一主要是先抛出选择STL容器时面对的问题,并且从中简单的对各个容器做个分类和使用对比. 在选择stl容器类型的时候,一般需要从以下的角度来考虑选择对象: 1.元素的排序情况 2.是否与标准相符 3.迭代器的能力 4.元素布局与C的兼容性 5.查找速度 6.因引用计数数所引起的反常行为 7.是否便于实现事务语义 8.迭代器在何种条件下变为无效 9.算法复杂度 除了标准和非标准容器分类外,不引起人关注的分类方法有根据容器在内存中的存储方式是否连续来分类.基于连续内存的有string,vector

C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针类型 3)如何定义一个函数指针(指向一个函数的入口地址) [中级程序员 转 高级程序员的 必经之路] 1,函数类型做函数的参数 把函数的入口地址传过来,奇怪的效果:[多态就是这样] 函数指针 做 函数参数 思想剖析 1,数组指针语法梳理 回顾,如何定义数组数据类型: [email protected

STL中各容器之函数总结

一.序列和关联非共有函数 所有标准库共有函数  (构造,相关属性,迭代器,插入与删除,比较,swap) 其中operator>,operator>=,operator<,operator<=,operator==,operator!=均不适用于priority_queue 顺序容器和关联容器共有函数 (1)   序列容器都提供5种相同的构造方法:关联容器都提供3种相同的构造方法 (2)    还有insert插入函数(序列容器有3个相同版本的插入.关联容器也有3个版本的) (3) 

STL中的容器

STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.slist是一个单向链表,rope本质上是一个重型字符串 非标准关联容器hash_set.hash_multiset.hash_map和hash_multimap. 几种标准非STL容器,包括数组.bitset.valarray.stack.queue和priority_queue 值得