首页 > 编程语言 >C++之vector

C++之vector

时间:2022-08-21 12:56:44浏览次数:126  
标签: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
From: https://www.cnblogs.com/grainrain/p/15391198.html

相关文章

  • 360se_getdbkey_c++
    关联:360安全浏览器历史记录、收藏夹  下载链接:https://files.cnblogs.com/files/DirWang/360se_getdbkey.zip?t=1661006095......
  • c++ lambda学习举例
    #include<iostream>#include<vector>#include<algorithm>#include<cmath>#include<ctime>usingstd::cout;usingstd::vector;usingstd::srand;usingstd::time......
  • C++数据类型
    整型C++标准short:>=2字节int:>=shortlong:>=4字节,>=intlonglong:>=8字节,>=longlinux系统short:2字节int:4字节long:4字节longlong:8字节int被设置为计算机......
  • 深度学习 之 模型部署【4】-libtorch入门 - pytorch部署torchscript 以及 c++ libto
    pytorch部署torchscriptfromtorchvision.modelsimportresnet34importtorch.nn.functionalasFimporttorch.nnasnnimporttorchimportcv2#读取一张图片,......
  • Vector为什么是线程安全的?
    因为官方在涉及线程不安全的操作上都加了synchronized关键字,相当于加了一把锁;这种线程安全不是绝对的,因为这种方式是方法级的,添加和删除的方法还是可以同时进行,可能存在添......
  • Effective C++ - 条款3 - 关于const的一切
    const与*符号左侧为所指对象的语义,符号右侧为指针自身语义const与iteratorconstiterator(是T*const)!=const_iterator详细原因应参考c++编译和c++设计与演化const......
  • C# 使用SIMD向量类型加速浮点数组求和运算(1):使用Vector4、Vector<T>
    作者:目录一、缘由二、使用向量类型2.1基本算法2.2使用大小固定的向量(如Vector4)2.2.1介绍2.2.2用Vector4编写浮点数组求和函数2.3使用大小与硬件相关的向量(如Vector......
  • C++primer练习16.1-14
    练习16.1::实例化就是模板通过实际调用而确定类型及其运算,抽象到具体练习16.2template<typenameT>intcompare(constT&v1,constT&v2){if(v1<v2)return-1;......
  • C++primer练习15.15-33
    练习15.15重新定义Bulk_quoteclassDisc_quote:publicQuote{public:Disc_quote()=default;Disc_quote(conststd::string&book,doublep......
  • C++模板(函数模板 & 类模板)
    模板编程可称范型编程,是一种忽视数据类型的编程方式,这样的好处是什么?且看下面一个例子:简单使用求解最值问题,返回两个值中的较大值:intMax(inta,intb){ returna>......