std::reserve和std::resize的区别
std::reserve是设置容器容量的,调用该函数后,容器的capacity可能会变大或不变,但不会变小
如:
vector value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
在我本机上例k、k1都为15,即和value.size()大小相等,k1并不是2,如果将
value.reserve(2)改为 value.reserve(20),则k为15,k1为20
可以看到当reserve设置的参数比容器实际存放的元素个数小,则容器的capacity()不会变化,不会变小;当reserve设置的参数比容器实际存放的元素个数大,则容器的capacity()会增大至reserve设置的参数大小。
resize是改变容器内实际存放的元素个数的,注意和容器容量的区别,一般地容器容量>=容器实际存放元素个数。
继续以上例讲解:
vector value{ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47 };
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
value.resize(100);
k1 = value.capacity();
通过resize(100)将容器实际存放的元素扩大到100个后,因为原来的capacity()只有15个,存放不了100个元素,故容器内部也会自动将容量扩容,这里在我本机k1变为了100。
int k = value.capacity();
value.reserve(2);
int k1 = value.capacity();
value.resize(100);
k1 = value.capacity();
value.resize(10);
k1 = value.capacity();
上例通过.resize(10)将实际存放的元素变为了10个(当需要减小容器的大小时,会移除多余的元素。),其后的容量
k1依然是100,即不会缩小。
综上:
std::reserve是设置容器容量的,调用该函数后,容器的capacity可能会变大或不变,但绝对不会比没用调用该函数之前的还小。
resize是改变容器内实际存放的元素个数的,只有改变的大小超过了capacity时,capacity才会变大。
resize变小时,capacity不会影响。
一般地容器容量>=容器实际存放元素个数。
《std::vector的reserve和resize的区别》这篇文章也值得一看
上一篇: matplotlib绘制多图
推荐阅读
-
C++11std::unique_lock与std::lock_guard的区别及多线程应用实例
-
C++11的模板类型判断:std::is_same和std::decay
-
视觉slam14讲VO前端设计中 std::min_element和lambda表达式的运用讲解
-
std::shared_mutex和std::mutex的性能对比(banchmark)
-
C++11的模板类型判断:std::is_same和std::decay
-
C++11std::unique_lock与std::lock_guard的区别及多线程应用实例
-
vector.resize 与 vector.reserve的区别
-
vector的resize和reserve的小研究
-
vector中resize()和reserve()区别
-
vector中resize与reserve的区别