C++ 《STL 之 vector 学习笔记》

目录

简介:

声明:

迭代器:

用法:

遍历vector

插入元素

排序

查找元素

二维数组:

定义

插入操作


简介:

vector类称作向量类,它实现了动态的数组,用于元素数量变化的对象数组。

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

扩大新元素时,如果超过当前的容量,则容量会自动扩充2倍,如果2倍容量仍不足,则继续扩大2倍。

声明:

vector v1;       

构造函数:
vector():创建一个空的vector。
vector(itn nSize):创建一个vector,元素个数为nSize。
vector(int nSize, const T& t):创建一个vector,元素个数为nSize,且值均为t。
vector(const vector&):拷贝构造函数。

vector vec;		//声明一个int型向量

vector vec(5);		//声明一个初始大小为5的int向量

vector vec(10, 1);	//声明一个初始大小为10且值都是1的向量

vector vec(tmp);	//声明并用tmp向量初始化vec向量

vector tmp(vec.begin(), vec.begin() + 3);	//用向量vec的第0个到第2个值初始化tmp

int arr[5] = {1, 2, 3, 4, 5};	
vector vec(arr, arr + 5);		//将arr数组的元素用于初始化vec向量
//和vec.end()指针统一。
vector vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值

vector v4{10, 1};  // v4有2个元素,值分别是10和1

vector v5{"hi"}; // 列表初始化:v5有一个元素

迭代器:

vector::iterator it;         正常迭代器

  • 开始指针:vec.begin();
  • 末尾指针:vec.end();    //指向最后一个元素的下一个位置
  • 指向常量的开始指针: vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
  • 指向常量的末尾指针: vec.cend()

vector::reverse_iterator ritr;             反向迭代器

  • vec.rbegin();    指向vector的最后一个元素
  • vec.rend();       指向vector的第一个元素的前一个位置

vector::const_iterator citr;        常量迭代器

  • vec.cbegin();                        
  • vec.cend();                            

   cbegin()/cend()决定了返回的迭代器类型为const。这时即使vector的类型不是const,也可以防止对该数据的误操作。

用法:

at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
back() 返回最后一个元素,不检查这个数据是否存在。
front() 返回第一个元素。
swap() 交换两个Vector。  v1.swap(v2) ;  交换v1,v2
push_back(value) 在Vector最后添加一个元素。
pop_back() 它从向量中删除最后一个元素。
empty() 判断Vector是否为空(返回true时为空)
insert(iter,val) 它将在指定位置插入新元素。
erase(iterator) 删除指定或指定范围的元素。
resize(nsize) 它修改向量的大小。
clear() 它从向量中删除所有元素。
size() 返回Vector元素数量的大小。
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
assign() 它将新值分配给向量。
operator=(vector) 它将新值分配给向量容器。
operator[](pos) 它访问指定的元素。
end() 返回最末元素的迭代器(实指向最末元素的下一个位置)
emplace(pos,args) 它将在位置pos之前插入一个新元素。
emplace_back(val) 它在末尾插入一个新元素。
rend() 它指向向量的第一个元素之前的元素。
rbegin() 它指向向量的最后一个元素。
begin() 返回第一个元素的迭代器。
max_size() 返回Vector所能容纳元素的最大数量(上限)。
cend() 它指向量中的last-last-element。
cbegin() 它指向量的第一个元素。
crbegin() 它指的是向量的最后一个字符。
crend() 它指的是向量的第一个元素之前的元素。
data() 它将向量的数据写入数组。
sort() 排序 
reverse() 元素翻转
find () 查找元素,返回地址

遍历vector

vector vec;

//迭代器遍历
vector::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
    cout << *it << endl;

//C++11
for(auto i:vec)
{
    cout<

插入元素

//push_back()插入
for (int i = 0; i != 100; i++) {
    vec.push_back(i);
}  

//错误的赋值
for(int i=0;i<10;++i)         //下标只能用来获取已经存在的元素
{
    vec[i]=i;
}

//insert()插入
vec.insert(vec.begin(),6);   //在下标0元素前插入6
vec.insert(vec.begin()+3,1);  //在下标3元素前插入1
v.insert(v.end(),3,0);     //在尾部插入3个0
vec.insert(vec.begin()+1,a+2,a+6);//在下标1元素前插入a的第三个元素到第五个元素(不包括a+6)

排序

//从小到大排序
sort(vec.begin(), vec.end());

//从大到小排序
//1.reverse函数
reverse(vec.begin(),vec.end());
//2.重写cmp
bool cmp(const int& a,const int& b)
{
    return a>b;
}
sort(vec.begin(),vec.end(),cmp);

查找元素

vector::iterator it; 
it=find(vec.begin(), vec.end(), 6);
if(it!=vec.end())
    cout<<*it<

二维数组:

定义

vector > A;	//正确的定义方式,后面的尖括号前要加上空格
vector> A;	//c++11之前这样定义是错误的,c++11之后支持这种定义方式

vector >A(3);    //定义二维动态数组大小3行

vec.size();     //二维数组的行数
vec[0].size();  //二维数组的列数

插入操作

//A=[[0,1,2],[3,4,5]]
vector > A;  // 大容器
//A.push_back里必须是vector
vector B;  // 小容器
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B); // 小容器放入大容器
B.clear();   // 小容器元素清空
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);

//或者
vector > v;
vector temp;
// 输入元素  
	for(i=0; i>  num;
			temp.push_back(num);
		}
		v.push_back(temp);
	}

//遍历输出所有元素
	for(i=0; i

 

你可能感兴趣的:(C++基础学习笔记,指针,c++,数据结构,算法)