由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个C++的基础问题
相关主题
问一道c++面试题vector析构的时候怎么办?
请问析构函数执行顺序map析构
vector的析构问题一个C++的问题
相关话题的讨论汇总
话题: vector话题: 析构话题: loop话题: 元素话题: elem
进入JobHunting版参与讨论
1 (共1页)
g********E
发帖数: 178
1
关于占用资源的,比如在一个for loop里,需要用vector存暂时的数据。下面哪种方法
更省资源呢?
1,在外面定义vector,在for loop里每次iteration完了后用pop_back清空vector元素
,再接着使用
2,在for loop里,每次iteration新定义一个vector,iteration完了后vector会被自动
清除,下一次再建一个新的用。
不知道系统删除变量具体都有些什么操作,还有新建变量,这样加起来会比我只删除里
面的元素快吗?
d**********x
发帖数: 4083
2
如果你在for loop里面定义,那个vector会不断析构。
谁教你用pop_back的。。= =
用clear,亲

【在 g********E 的大作中提到】
: 关于占用资源的,比如在一个for loop里,需要用vector存暂时的数据。下面哪种方法
: 更省资源呢?
: 1,在外面定义vector,在for loop里每次iteration完了后用pop_back清空vector元素
: ,再接着使用
: 2,在for loop里,每次iteration新定义一个vector,iteration完了后vector会被自动
: 清除,下一次再建一个新的用。
: 不知道系统删除变量具体都有些什么操作,还有新建变量,这样加起来会比我只删除里
: 面的元素快吗?

g********E
发帖数: 178
3
Thank you dear!但是什么叫vector会不断析构呢?
我的元素不是一次删完的,不过clear我真是没用过,谢谢提点啊,另外还想问,除了
看着难看,一个一个pop_back会比clear慢吗?I guess just function call overhead?

【在 d**********x 的大作中提到】
: 如果你在for loop里面定义,那个vector会不断析构。
: 谁教你用pop_back的。。= =
: 用clear,亲

d**********x
发帖数: 4083
4
如果你不是一次删完的话,但是要从尾部删,直接resize即可,循环和function call
都是有cost的,而且写着也麻烦不是
其实clear和直接析构的差别在于vector本身是否需要析构,大头在哪边要看你的元素
有没有析构的cost

overhead?

【在 g********E 的大作中提到】
: Thank you dear!但是什么叫vector会不断析构呢?
: 我的元素不是一次删完的,不过clear我真是没用过,谢谢提点啊,另外还想问,除了
: 看着难看,一个一个pop_back会比clear慢吗?I guess just function call overhead?

g********E
发帖数: 178
5
查了下原来析构是destruct,明白了,如果我就用默认的,
This destroys all container elements, and deallocates all the storage
capacity allocated by the vector using its allocator.
这样是不是析构就不如clear/resize快?
resize不错,非常符合我的需要:)

call

【在 d**********x 的大作中提到】
: 如果你不是一次删完的话,但是要从尾部删,直接resize即可,循环和function call
: 都是有cost的,而且写着也麻烦不是
: 其实clear和直接析构的差别在于vector本身是否需要析构,大头在哪边要看你的元素
: 有没有析构的cost
:
: overhead?

d**********x
发帖数: 4083
6
恩,destruct的时候有两部分cost
1是vector本身的内存
2是各个元素的destruct
如果元素都是int啊char之类的,那大头基本在vector那边,用resize好了

【在 g********E 的大作中提到】
: 查了下原来析构是destruct,明白了,如果我就用默认的,
: This destroys all container elements, and deallocates all the storage
: capacity allocated by the vector using its allocator.
: 这样是不是析构就不如clear/resize快?
: resize不错,非常符合我的需要:)
:
: call

g********E
发帖数: 178
7
明白啦,多谢传道授业解惑,可惜没有包子给你:)

【在 d**********x 的大作中提到】
: 恩,destruct的时候有两部分cost
: 1是vector本身的内存
: 2是各个元素的destruct
: 如果元素都是int啊char之类的,那大头基本在vector那边,用resize好了

n**m
发帖数: 122
8
我帮你看了一下 包子好像还不少呢 lol

【在 g********E 的大作中提到】
: 明白啦,多谢传道授业解惑,可惜没有包子给你:)
d**********x
发帖数: 4083
9
= =
要啥包子,我已经够胖了

【在 g********E 的大作中提到】
: 明白啦,多谢传道授业解惑,可惜没有包子给你:)
g********E
发帖数: 178
10
ft,我这是老ID新上线,哪儿来的包子。。。

【在 n**m 的大作中提到】
: 我帮你看了一下 包子好像还不少呢 lol
b******7
发帖数: 92
11
vector的大概的实现(省略很多细节)。
如果在for循环里面定义vector,则会调用构造和析构函数,导致elem不断的new和
delete
而如果在外面定义,则只会调用vector的构造和析构一次,即一次new和delete
template
class vector{
public:
vector(size_t n){capacity = n;elem = new T[capacity];size=0;}
~vector(){delete [] elem;}
void clear(){size=0;}
....
....
private:
T * elem;
int capacity;
int size;
....
};

【在 g********E 的大作中提到】
: 关于占用资源的,比如在一个for loop里,需要用vector存暂时的数据。下面哪种方法
: 更省资源呢?
: 1,在外面定义vector,在for loop里每次iteration完了后用pop_back清空vector元素
: ,再接着使用
: 2,在for loop里,每次iteration新定义一个vector,iteration完了后vector会被自动
: 清除,下一次再建一个新的用。
: 不知道系统删除变量具体都有些什么操作,还有新建变量,这样加起来会比我只删除里
: 面的元素快吗?

r*******e
发帖数: 7583
12
看过某公司的coding guidance
有一点就是尽量不要在loop里面创建复杂变量,连string都最好重复利用

【在 g********E 的大作中提到】
: 关于占用资源的,比如在一个for loop里,需要用vector存暂时的数据。下面哪种方法
: 更省资源呢?
: 1,在外面定义vector,在for loop里每次iteration完了后用pop_back清空vector元素
: ,再接着使用
: 2,在for loop里,每次iteration新定义一个vector,iteration完了后vector会被自动
: 清除,下一次再建一个新的用。
: 不知道系统删除变量具体都有些什么操作,还有新建变量,这样加起来会比我只删除里
: 面的元素快吗?

f********4
发帖数: 988
13
如果是简单类型
int char
就不调用析构函数了是嘛。。。
我随便问一下,还是分情况,在编译器优化OR不优化分情况讨论?
d**********x
发帖数: 4083
14
我直觉上觉得这种层次的东西编译器很难优化,因为析构的副作用编译器不能预知
是不是这样。。可以g++ -O2 -S看一下汇编,我就不动手了。。

【在 f********4 的大作中提到】
: 如果是简单类型
: int char
: 就不调用析构函数了是嘛。。。
: 我随便问一下,还是分情况,在编译器优化OR不优化分情况讨论?

1 (共1页)
进入JobHunting版参与讨论
相关主题
请问析构函数执行顺序map析构
vector的析构问题一个C++的问题
vector析构的时候怎么办?问一道c++面试题
相关话题的讨论汇总
话题: vector话题: 析构话题: loop话题: 元素话题: elem