【发布时间】:2017-05-11 08:56:16
【问题描述】:
主要问题
向量的resize 是否会影响性能,即使它的容量大于它的大小?
例如,我想为伪代码编写如下代码
const size_t size_a = 2;
const size_t i_max = 3;
vector<int> a(size_a) = random_vector;
vector<int> b;
for (size_t i=0; i<i_max; i++){
patch_a_at_the_end_of_b;
}
所以,b 每个循环都会改变它的大小,但它会单调增加,我知道b 的最终大小。
首先,我创建了一个函数concat(a,b),以便将a 修补到b 的末尾。
void concat(const vector<int> a, vector<int> &b){
const size_t size_b = b.size();
b.resize(size_b+a.size());
for(size_t i=0; i<a.size(); i++)
b[size_b + i] = a[i];
}
请注意,每次b 被concat 调用时,我们都会调整向量的大小。
然后,我在主函数的for循环前面添加b.reserve。
const size_t size_a = 2;
const size_t i_max = 3;
vector<int> a(size_a) = random_vector;
vector<int> b;
b.reserve(size_a*i_max);
for (size_t i=0; i<i_max; i++){
concat(a,b);
}
【问题讨论】:
-
问题开头一定要喊吗?
-
我把它改成了普通字体。
-
不应该是
b.reserve(size_b + size_a * i_max);吗? -
b = concat(a,b);concat 被定义为void。除此之外,储备机制似乎很合乎逻辑。 -
A.S.H b 首先是空的,
size_b=0。我为您的第二条评论进行了编辑。
标签: c++ vector dynamic-memory-allocation