c++vector方法第二次试用

这篇会有点乱,但最后尽量总结好。

先看下这次的代码

#include<iostream>
#include<vector>
using namespace std; 
int main(){
	vector<int> v;
	v.reserve(10);//保留适当的空间 
 	//加入7个元素 
 	int size;
	for(int i=0; i<7; i++)
	    v.push_back(i);
	try {
//		第一种没有边界检查不会报错,第二种有边界检查会报错,
//		这或许是我们使用v.at()的原因吧
	    int iVal1 = v[7];    // not bounds checked - will not throw
	    int iVal2 = v.at(6); // bounds checked - will throw if out of range
		size=v.size();
		//输出容器里面元素的个数 
		cout<<"首次添加7个元素后容器里元素个数:"<<size<<endl; 
		//输出7个元素 
		cout<<"打印容器里面的7个元素"<<endl; 
	    for(int i=0;i<7;i++){
	    	int number=v.at(i);
	    	cout<<number<<endl;
		}
	}
	catch(const exception& e) {
	    cout << e.what();
	}
	//容器打大小打印一遍 
	int capa=v.capacity();
	cout<<"容器大小:"<<capa<<endl;
	//加入7个元素,现在有14个元素了,开始我们保留的容器空间是10.
	//现在超过预留空间了,看会不会自动以16的倍数增加 ,猜测都不会,
	//要不然要v.reserve(10)有什么用呢?
	//额,,,猜错了,它会增加,而且不是以16的倍数增加,以v.reserve的倍数增加 
	for(int i=0; i<7; i++)
	    v.push_back(i);
	//打印容器大小 
	capa=v.capacity();
	cout<<"再添加7个元素后的容器大小:"<<capa<<endl;
	size=v.size(); 
	cout<<"再添加7个元素后的容器里面元素的个数:"<<size<<endl;
	cout<<"打印这14个元素"<<endl; 
	for(int i=0;i<14;i++){
	    int number=v.at(i);
	    cout<<number<<endl;
	}
	for(int i=0;i<4;i++){
		v.pop_back();
	}
	size=v.size();
	cout<<"删除4个元素后的容器里面元素的个数:"<<size<<endl;	
	return 0;
} 

  结果如下

  一、首先用到了v.reserve()这个方法,它的解释是保留适当空间,上次我没用这个,添加元素时以16的倍数增加,但通过上面的代码,添加元素超过10个后,他自动增加的容量是10,说明每次超过容量,自动增加的容量是10,也就是这里设置的v.reserve(),没使用这个v.reserve()时,系统自动默认是v.reserve(16),以16的倍数增加。

  二、再是找到指定位置的元素用的方法是v.at(),大多时候用这个方法。当你查找的元素位置大于已有元素个数,就是超过了边界值时,使用try-catch配合使用他会有报错,而直接使用

V[7]。超多边界值时,它的返回值是0,是一个错误的值。  

  三、返回容器中元素的个数的方法是v.size()。

  四、删除元素好像只知道从最后面删除,方法是v.pop_back();删除最后的一个元素,在上面的代码里面也有显示。

  五、 可以看到这个vetor的插入和删除操作分别是v.push_back(i)和v.pop_back(),且都是在末尾进行的,很容易联想到是栈,我反正觉得就是栈的知识了,这样也好记忆这个

v.push_back(i)和v.pop_back(),push和pop。
     它还有很多方法,今天就先这样吧!

  最后又一个问题,删除元素后,容器的容量会自动变小吗?用v.reserve()和不用时都是一样的情况吗?黑了,看不见了,下次再弄吧。

Vector函数

函数

表述

c.assign(beg,end)

c.assign(n,elem)

[beg; end)区间中的数据赋值给c。

n个elem的拷贝赋值给c。

c.at(idx)

传回索引idx所指的数据,如果idx越界,抛出out_of_range。

c.back()

传回最后一个数据,不检查这个数据是否存在。

c.begin()

传回迭代器重的可一个数据。

c.capacity()

返回容器中数据个数。

c.clear()

移除容器中所有数据。

c.empty()

判断容器是否为空。

c.end()

指向迭代器中的最后一个数据地址。

c.erase(pos)

c.erase(beg,end)

删除pos位置的数据,传回下一个数据的位置。

删除[beg,end)区间的数据,传回下一个数据的位置。

c.front()

传回第一个数据。

get_allocator

使用构造函数返回一个拷贝。

c.insert(pos,elem)

c.insert(pos,n,elem)

c.insert(pos,beg,end)

pos位置插入一个elem拷贝,传回新数据位置。

pos位置插入n个elem数据。无返回值。

pos位置插入在[beg,end)区间的数据。无返回值。

c.max_size()

返回容器中最大数据的数量。

c.pop_back()

删除最后一个数据。

c.push_back(elem)

在尾部加入一个数据。

c.rbegin()

传回一个逆向队列的第一个数据。

c.rend()

传回一个逆向队列的最后一个数据的下一个位置。

c.resize(num)

重新指定队列的长度。

c.reserve()

保留适当的容量。

c.size()

返回容器中实际数据的个数。

c1.swap(c2)

swap(c1,c2)

c1和c2元素互换。

同上操作。

  
hello world!
原文地址:https://www.cnblogs.com/simongreen/p/9373852.html