vector 中 emplace_back 方法的用途
在写代码的过程中,CLion 提醒我把 push_back 方法替换成 emplace_back 方法: emplace_back 函数的作用是减少对象拷贝和构造次数,是 C++11 中的新特性,主要适用于对临时对象的赋值。 在使用 push_back 函数往容器中增加新元素时,必须要有一个该对象的实例才行,而 empl ... 阅读更多
在写代码的过程中,CLion 提醒我把 push_back 方法替换成 emplace_back 方法: emplace_back 函数的作用是减少对象拷贝和构造次数,是 C++11 中的新特性,主要适用于对临时对象的赋值。 在使用 push_back 函数往容器中增加新元素时,必须要有一个该对象的实例才行,而 empl ... 阅读更多
往 vector 中添加元素时,如果空间不够将会导致扩容。 vector 有两个属性:size 和 capacity 。 size 表示已经使用的数据容量,capacity 表示数组的实际容量,包含已使用的和未使用的。 vector 扩容规则: 当数组大小不够容纳新增元素时,开辟更大的内存空间,把旧空间上的数据复制过来, ... 阅读更多
一、迭代器失效 向容器添加或者删除元素可能会导致指向容器的指针、引用或者迭代器失效。使用已经失效的指针、引用或者迭代器将会导致程序出现异常,编码过程中一定要时刻注意迭代器失效的场景。 例如,以 vector 为例:
|
1 2 3 4 5 6 7 8 9 10 |
int main() { vector<int> v{1, 2}; vector<int>::iterator it; for (it = v.begin(); it != v.end(); it++) { v.push_back(*it); } return 0; } |
执行以上代码会导致段错 ... 阅读更多
STL 中的 string 类有两个方法 size() 和 length() 用来返回字符串的长度。 两者在实现上没有区别:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
> sed -n 907,918p /usr/include/c++/7/bits/basic_string.h // Capacity: /// Returns the number of characters in the string, not including any /// null-termination. size_type size() const _GLIBCXX_NOEXCEPT { return _M_string_length; } /// Returns the number of characters in the string, not including any /// null-termination. size_type length() const _GLIBCXX_NOEXCEPT { return _M_string_length; } |
reserve 方法用来给 vector 预留空间,预留的空间只会改变 capacity 的大小,不会改变 size 大小。 resize 方法表示重新调整数组大小,capacity 和 size 都会改变。 使用 reserve 后,不能直接使用下标来增加元素,虽然内存是已经分配了直接使用不会报错,但是直接通过下标来复制会导 ... 阅读更多
一、 vector 介绍 标准库类型 vector 用来表示对象的集合,其中所有对象的类型都相同且不固定长度,常被称为 「动态数组」 。 它并不是一个标准的数据类型,而是一个类模板用来实例其他对象,也被称为容器。 使用它需要包含一下头文件和使用声明: [crayon-694f811d319ee398274992 ... 阅读更多
一、概述 标准库类型 string 用来表示可变长的字符串序列,使用它需要包含 string 头文件。 作为标准库的一部分,它被定义在 std 命名空间中,使用前需要加上以下代码:
|
1 2 |
#include <string> using std::string; |
## string/string.h/cstring 三者的区别 ... 阅读更多