C++之vector
2022/8/22 14:27:15
本文主要是介绍C++之vector,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、标准库函数
1. 构造数组 ——参考博客
一维数组构造:
// 构造一维数组 vector<int> vec(n); // n为vec长度,默认所有值为0 vector<int> vec(n, 1); // 所有值设为1
二维m*n数组构造:
// 构造二维维数组 vector<int> tmp(n); // n为vec长度,默认所有值为0 vector<vector<int> > vec(m, tmp); // 所有值仍为0
2. 空间相关
size_type size(); // 得到实际元素个数 size_type max_size(); // 系统可提供的vector容器能存放的元素数目的极限值 size_type capacity() const noexcept; // 得到已申请的空间能存放的元素个数
* size_type即 unsigned int。vector max_size中未使用的部分不一定会保留,有可能使用时就出错了
void resize (size_type n); void resize (size_type n, const value_type& val); void reserve (size_type n);
resize函数时扩展用户可见的空间大小。reserve将capacity扩展为n(相当于扩容时的操作)(当 n <= capacity时无操作)。
1)若 n <= size,保留前n个元素,后面的调用erase;否则,扩容到总大小为n。若 n > max_size,则还要申请更多空间(2倍于现空间,并将现有元素拷贝到新空间内)。
2)若提供了val,则新插入的值为val,否则插入默认值(0)。
3. assign 与 swap
void assign (InputIterator first, InputIterator last); // InputIterator: iterator of input vector void assign (size_type n, const value_type& val); // n elements with a copy of val void assign (initializer_list<value_type> il); vec.assign(input_vec.begin(), intpu_vec.end()); vec.assign(my_array, my_array+4); // my_array 是一个普通的数组
assign为vector分配新的内容,并将size设为新分配后的大小。
void swap (vector& x); vec.swap(old_vec);
swap交换两个vector的内容,相当于vec现在指向old_vec的空间,二者的所有属性都互换了。
4. erase 与 clear
iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last); void clear() noexcept;
* erase 返回得到 指向被删除的位置的下一个位置的迭代器
erase操作具体为:将尾部未删除的部分拷贝到删除的起始点处,将新尾部之后的内容 _Destory,再将尾部设为新尾部。 ——参考博客
注意,_Destroy() 将对应的删除区的元素调用析构函数,
1)若要销毁的为 int 等简单类型,析构不会对内存上的值操作;
2)如果元素是一些object,则它将为当前存储的每个元素调用它们各自的析构函数。
3)如果元素是指向对象的指针,并不会自动调用对应的析构函数。直接clear会造成内存泄漏应遍历vector使用delete,然后再调用clear,完成删除。
clear调用 erase(begin(), end()) ,没有其它步骤。
二、部分细节
1. 使用下标访问元素时,不会进行越界检查,编译无问题; 可以使用 at() 函数读取元素,该函数内部会进行越界检查
2. 截取部分片段
#include <iostream> #include <vector> int main() { std::vector<int> vector{1,2,3,4,5,6,7,8,9}; //截取前4个数 std::vector<int>::const_iterator first1 = vector.begin(); std::vector<int>::const_iterator last1 = vector.begin() + 4; // 停止的地方,取到这一位之前一个 std::vector<int> cut1(first1, last1);//截取后4个数 std::vector<int>::const_iterator first2 = vector.end() - 4; std::vector<int>::const_iterator last2 = vector.end(); std::vector<int> cut2_(first2, last2); // 停止的地方 }
3. 支持的运算符
如果vector中的元素类型是简单类型(内置类型),则支持: !=, ==, <, <=, >, >=,后四种运算符可以用于比较两个vector的大小(按字典序)。
这篇关于C++之vector的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享