容器vector和迭代器iterator的学习使用

vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utility

vector的声明:

vector<type> vec;
size();resize();at();front();back();begin();end();rbegin();rend();empty();assign();swap();clear();erase();insert()
vector&oprator=(const vector& vec);
迭代器的声明 :

vector<type>::iterator it;  
vector<type>::const_iterator it;  
vector<type>::reverse_iterator it;  
vector<type>::const_reverse_iterator it;  

  1. 存取元素的方法
    1. vec[i] - 存取索引值i 的元素。第一vec[0]
    2. vec.at(i) - 存取索引值 i 的元素的參照,以 at() 存取會做陣列邊界檢查,如果存取越界將會拋出一個例外,這是與operator[]的唯一差異。
    3. vec.front() - 回傳 vector 第一個元素的參照。
    4. vec.back() - 回傳 vector 最尾元素的參照。
  2. 新增或移除元素的方法
    1. vec.push_back() - 新增元素至 vector 的尾端,必要時會進行記憶體配置。
    2. vec.pop_back() - 刪除 vector 最尾端的元素。
    3. vec.insert() - 插入一個或多個元素至 vector 內的任意位置。
    4. vec.erase() - 刪除 vector 中一個或多個元素。
    5. vec.clear() - 清空所有元素。
  3. 取得長度/容量
    1. vec.size() - 取得 vector 目前持有的元素個數。
    2. vec.empty() - 如果 vector 內部為空,則傳回 true 值。
    3. vec.capacity() - 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。
  4. 重新配置/重設長度
    1. vec.reserve() - 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。
    2. vec.resize() - 改變 vector 目前持有的元素個數。
  5. 迭代 (Iterator)
    1. vec.begin() - 回傳一個Iterator,它指向 vector 第一個元素。
    2. vec.end() - 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。
    3. vec.rbegin() - 回傳一個反向Iterator,它指向 vector 最尾端元素的。
    4. vec.rend() - 回傳一個Iterator,它指向 vector 的第一個元素。

简单应用:

#include <iostream>
#include<vector>
using namespace std;
int main()
{

	vector<int> v;
	cout<<"在后面插入元素 "<<endl;;
	for(int i=0;i<10;i++){
	 v.push_back(i);
	}
	cout<<"删除最后一个元素 "<<endl;;
	v.pop_back();
	v.pop_back();
	cout<<"打印 "<<endl;;
	for(size_t i=0;i<v.size();i++){

        cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;

	}
	cout<<"使用front()、at()、back() "<<endl;
	cout<<v.front()         //front()、back()、back()也能充当可修改的左值
	    <<"-"<<v.at(4)
	    <<"-"<<v.back()<<endl;

	cout<<"判断不为空、插入元素"<<endl;;
        for(int i=0;i<10;i++){
		if(!v.empty())
	    v.push_back(++i);
	}
        cout<<"打印vector数组元素"<<endl;;
	for(size_t i=0;i<v.size();i++){

		 cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl;

	}

    return 0 ;
}
比较全面的应用:

#include <iostream>
#include<vector>
#include <cstdlib>
using namespace std;
int main()
{
	vector<int> v1;
	vector<int>::iterator it;
	for(int i=0;i<10;i++){

		v1.push_back(i);

	}
	cout<<"正向输出:"<<endl;
	for(it=v1.begin();it!=v1.end();it++){

		cout<<*it<<" ";
	}
	cout<<endl;
	cout<<"反向输出:"<<endl;
	vector<int>::reverse_iterator rit;
	for(rit=v1.rbegin();rit!=v1.rend();rit++){

			cout<<*rit<<" ";
		}

	cout<<endl<<"--------------------------------------"
		<<endl<<"v2:"<<endl;
	int arr[]={0,1,2,3,4,5,6,7,8,9};
	vector<int> v2(arr,arr+10);         //将arr数组复制到容器v2中去
	vector<int>::iterator it2;
        for(it2=v2.begin();it2!=v2.end();it2++){

		cout<<*it2<<" ";
	}

        cout<<endl<<"v3:"<<endl;
	vector<int> v3(v2.begin(),v2.end());//利用构造函数初始化容器v3
	vector<int>::iterator  it3;
	for(it3=v3.begin();it3!=v3.end();it3++){
		cout<<*it3<<"  ";
	}

	cout<<endl<<"v4:"<<endl;
	//erase和insert对于const iterater和const reverse_itetater并不支持
	vector<int> v4(10,10);
	vector<int>::iterator  it4;
	for(it4=v4.begin();it4!=v4.end();it4++){

		cout<<*it4<<"  ";
	}
	//resize()的使用
        cout<<endl<<"v1大小:"<<v1.size()<<endl<<"v2大小:"<<v2.size()
		<<endl<<"v3大小:"<<v3.size()<<endl<<"v4大小:"<<v4.size()
    	<<endl;

        v3.resize(10,0);
        cout<<"resize()为10后v3的大小:"<<v3.size()<<endl;
        for(int i=0;i<(int)v3.size();i++){

    	       cout<<v3[i]<<" ";
       }

    	v3.resize(5);
    	cout<<endl<<"resize()为5后v3的大小:"<<v3.size()<<endl;
    	for(int i=0;i<(int)v3.size();i++){

        	cout<<v3[i]<<" ";
  	 }
 	 //擦除的使用
  	 v1.clear();
  	 cout<<endl<<"v1全擦除后的大小:"<< v1.size()<<endl;


   	cout<<"插入操作insert()";
   	vector<int>::iterator itx;
	itx=v1.begin();
        cout<<endl<<"在位置1插入88"<<endl;;
  	v1.insert(itx,88);//在开始的位置插入111,
  	for(int i=0;i<(int)v1.size();i++){

           	cout<<v1[i]<<" ";
   	}
	
   	cout<<endl;
   	v1.insert(itx,10,5);//从位置0开始连续插入10个5;
   	for(int i=0;i<(int)v1.size();i++){

		cout<<v1[i]<<" ";
   	}

  	cout<<endl<<"擦除位置5到位置10的元素"<<endl;
   	v1.erase(itx+5,itx+10);    //擦除位置5到位置10的元素、
   	for(int i =0;i<(int)v1.size();i++){

	   cout<<v1[i]<<"  ";
  	 }
  	 v1.clear();
  	 cout<<endl<<"全擦除后v1大小"<<v1.size()<<endl;

   	vector<int> vec;
   	vec.swap(v2);
   	vec.reserve(1000);
   	cout<<vec.size()<<endl;


   	return 0 ;
}


                
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值