ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++之vector

2022-08-21 13:02:28  阅读:189  来源: 互联网

标签:const iterator C++ vector vec type size


 

一、标准库函数

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的大小(按字典序)。

 

标签:const,iterator,C++,vector,vec,type,size
来源: https://www.cnblogs.com/grainrain/p/15391198.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有