首页 > 其他分享 >Vector

Vector

时间:2024-02-20 17:58:46浏览次数:20  
标签:容器 Vector int 元素 vector 空间 拷贝

vector容器(重点,常用容器)

1.数据结构:连续存储空间

2.迭代器:随机迭代器

3.vector容器动态增长原理

​ 1.当存储空不够时,会开辟另一块大的空间,然后把数据拷贝过去,最后在销毁原来的空间

​ 2.申请的空间,会比用户需求大一点

​ 3.重新分配空间,那么原来的迭代器就会失效

​ 所谓动态增加大小,并不是在原空间之后续接新空间(因为无法保证原空间之后尚有可配置的空间),而是一块更大的内存空间,然后将原数据拷贝新空间,并释放原空间。因此,对vector的任何操作,一旦引起空间的重新配置,指向原vector的所有迭代器就都失效了。这是程序员容易犯的一个错误,务必小心。

4.常用的api:

​ 1.构造

vector<T> v; //采用模板实现类实现,默认构造函数
vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。
vector(n, elem);//构造函数将n个elem拷贝给本身。
vector(const vector& vec);//拷贝构造函数。

//例子 使用第二个构造函数 我们可以...
int arr[] = {2,3,4,1,9};
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int)); 

​ 2.赋值操作

assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
vector& operator=(const vector  &vec);//重载等号操作符
swap(vec);// 将vec与本身的元素互换。

​ 3.大小操作

size();//返回容器中元素的个数
empty();//判断容器是否为空
resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。
capacity();//容器的容量
reserve(int len);//容器预留len个元素长度,预留位置(不初始化的)不初始化,元素不可访问。

//reserve作用 在开大量空间时候尽量让vector少重新开空间

​ 4.数据存取

at(int idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。
operator[];//返回索引idx所指的数据,越界时,运行直接报错
front();//返回容器中第一个数据元素
back();//返回容器中最后一个数据元素

​ 5.插入和删除c

insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.
push_back(ele); //尾部插入元素ele
pop_back();//删除最后一个元素
erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素
erase(const_iterator pos);//删除迭代器指向的元素
clear();//删除容器中所有元素

5.常用的api中的注意:

​ 1.resize开辟空间,并初始化。reserve开辟空间,但不初始化.没有初始化的空间不能访问

6.reserve作用:如果容器要存储大量数据时,要先开辟空间,避免多次申请空间

7.swap作用:缩小容器的容量

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
usingnamespace std;

int main(){

	vector<int> v;
	for(int i =0; i <100000;i ++){
		v.push_back(i);
	}

	cout <<"capacity:"<< v.capacity()<< endl; //大于100000的一个数字
	cout <<"size:"<< v.size()<< endl; //100000

	//此时 通过resize改变容器大小
	v.resize(10);

	cout <<"capacity:"<< v.capacity()<< endl; //大于100000的一个数字
	cout <<"size:"<< v.size()<< endl;  //10

	//匿名对象跟v交换原理
    /*
    vector<int> v2(v) //拷贝构造 容量为10的v2
    vector<int> v2(v).swap(v) //交换v2与v
    */
    
    //匿名对象跟v交换原理
	vector<int>(v).swap(v); 

	cout <<"capacity:"<< v.capacity()<< endl;
	cout <<"size:"<< v.size()<< endl;


	system("pause");
	return EXIT_SUCCESS;
}

标签:容器,Vector,int,元素,vector,空间,拷贝
From: https://www.cnblogs.com/wbcde116/p/18023690

相关文章

  • c++vector
    下面是我在学习过程中对vector的理解,希望能够帮助到大家;vector(容器)(本质和数组一致)不过其对象长度不定.与数组不一样的是在使用vector是需要写头文件#include下面举出几个例子来说明:vectorv;  建立了一个名为v的int类型的容器,在这里并没有初始话值为多少,所以此时为......
  • Vector扩容机制
    C++Vector是如何自动扩容的?​ C++的vector是一个动态数组,它可以自动调整大小以容纳更多的元素。当向vector中添加元素时,如果当前容量不足以容纳新元素,就会触发扩容操作。vector的扩容策略通常是按照一定的增长因子来进行扩容,具体增长因子的选择可能因编译器而异。一种常......
  • vector<bool>的玄学问题及处理方法
    今天做题的时候搞范围循环,发现不能对vector数组元素引用。报错vector<bool>prev(26,false);for(bool&x:prev)x=true;[错误]非常量引用的初始值必须是左值这很反常识,因为其他元素的vector我都是用这样来操作元素的。同时我想到之前就遇到一个问题,无法直接......
  • vector
    vector的定义与特性为动态数组,可以存储一系列相同类型的元素。头文件<vector>vector<类型>变量名;会根据元素数量自动分配内存空间可以使用索引访问,索引(下标)从0开始,最后一个元素的索引为size()-1,但是不可以写成i<=size()-1,因为size为整数未定型,这样写会变得很大,会出问题,可以......
  • dremio vectorized Parquet Reader v2 支持
    dremio从24.3开始支持parquetv2writer同时性能提升还是很明显的对于读官方在TPC-DS测试中,最低有22%左右的,最高97%,平均77%左右写入同样也是TPC-DS中,存储降低24%左右,写入提升1.5%左右,如果开启了c3读性能提升6.4%开启ui配置(全局)可以通过supportkeysql配置(全......
  • 如果在循环中不改变vector的大小,C++编译器是否会将.size()优化为常数?
      在C++中,可以使用以下代码计算vector<int>中所有元素的和:vector<int>v={1,3,7,9};sums=0;for(inti=0;i<v.size();i++){sums+=v[i];}  这是一段很普通的代码,问题在于:在这段代码中,v.size()会在循环开始前仅计算一次?还是会在每次循环中都计算一次......
  • C转C++速成浅入浅出系列——STL之vector
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。vector【vector:矢量,向量】理解为向量、动态数组等。我想在我这种入门阶段,最常用的还是其动态数组的功能。需提供头文件#include<vector>创建可指定数组大小,和所有值的初始值;数组大小初始值......
  • vector的使用
    1、基本概念vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector是C++STL的一个重要成员,使用它时需要包含头文件:1#include<vector>构造函数与初始化: vector的构造函数用来构造vector容器,函数原型为:1vector<T>v;//......
  • vector 和 list的区别
    vectorlist定义动态数组双向链表增加push_backpush_back,push_front,insert删除pop_backpop_back,pop_front,remove排序头文件sort成员函数sortlist经过排序、插入操作后,迭代器不会失效,仍指向原来的元素#include<iostream>#include<list>......
  • STL-vector向量
    STL-vector向量目录STL-vector向量1.头文件2.构造函数3.索引存取元素4.遍历元素4.capacity相关5.插入元素6.删除元素7.排序和翻转8.底层原理9.特殊记忆函数总结参考资料vector数组是一个能存放任意数据类型(类,结构,普通变量类型等)的动态数组,在数据结构中就相当于顺序储存的线性......