青少年编程知识记录 codecoming

STL入门——容器1:vector (不定长度数组)

一、定义 

    vector是一个不定长度数组。不仅如此,它把一些常用操作“封装”在了 vector 类型内部。

      vector 是一个模板类,所以需要用 vector<int> a 或者 vector<double> b 这样的方式来声明一个 vector 。vector<int> 是一个类似于 int a[] 的整数数组,而 vector<string> 就是一个类似于 string a[] 字符串数组。vector 看上去是“一等公民”,因为它们可以直接赋值,还可以作为函数的参数或者返回值,而无须像传递数组那样另外用一个变量指定元素的个数。

    它的中文名字叫做“动态数组”或者“不定长数组”。

二、基本操作

1.定义

#include <iostream>  #include <vector>  using namespace std;  int main(){      vector <int> i;//一个int的动态数组      vector <char> c;//一个char的动态数组      vector <node> n;//一个node的动态数组(node是结构体名)      return 0;   }

2.数据插入

#include <iostream>  #include <vector>  using namespace std;  int main(){  	      vector <int> a;//一个int的动态数组    	int x;    	for(int i=0;i<10;i++){    		cin>>x;    		a.push_back(x);  	}  	return 0;   }

其中,push_back意为在尾部添加一个元素。



3.数据的输出

#include <iostream>  #include <vector>  using namespace std;  int main(){  	      vector <int> a;//一个int的动态数组    	int x;    	for(int i=0;i<5;i++){    		cin>>x;    		a.push_back(x);  	}  	//输出  	for(int i=0;i<a.size();i++){  		cout<<a[i]<<" ";  	}   	return 0;   }

 

4.测试多次输入输出

#include <iostream>  #include <vector>  using namespace std;  int main(){  	      vector <int> a;//一个int的动态数组    	int x;    	for(int i=0;i<3;i++){    		cin>>x;    		a.push_back(x);  	}  	//输出  	for(int i=0;i<a.size();i++){  		cout<<a[i]<<" ";  	}   	cout<<endl<<"------------"<<endl;   	// 第二次输入   	for(int i=0;i<4;i++){    		cin>>x;    		a.push_back(x);  	}  	//输出  	for(int i=0;i<a.size();i++){  		cout<<a[i]<<" ";  	}   	return 0;   }

结果:

1 3 4  1 3 4  ------------  1 6 7 8  1 3 4 1 6 7 8

5.数组直接赋值操作

#include <iostream>  #include <vector>  using namespace std;  int main() {  	vector <int> a,b;//一个int的动态数组  	int x;  	for(int i=0; i<5; i++) {  		cin>>x;  		a.push_back(x);  	}  	//输出  	cout<<"a=";  	for(int i=0; i<a.size(); i++) {  		cout<<a[i]<<" ";  	}  	b=a;  //数组直接赋值  	cout<<endl<<"b=";  	for(int i=0; i<b.size(); i++) {  		cout<<b[i]<<" ";  	}  	return 0;  }

数组可以直接同步赋值。

结论:

3 4 5 3 1  a=3 4 5 3 1  b=3 4 5 3 1

6.数据插入操作

#include <iostream>  #include <vector>  using namespace std;  int main() {  	vector <int> a,b;//一个int的动态数组  	int x;  	for(int i=0; i<5; i++) {  		cin>>x;  		a.push_back(x);  	}  	//输出  	cout<<"a=";  	for(int i=0; i<a.size(); i++) {  		cout<<a[i]<<" ";  	}  	cout<<endl;   	a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5  	//输出  	cout<<"a=";  	for(int i=0; i<a.size(); i++) {  		cout<<a[i]<<" ";  	}  	return 0;  }

结论:

3 4 5 6 7  a=3 4 5 6 7  a=3 5 5 5 4 5 6 7



第二种用法:

#include <iostream>  #include <vector>  using namespace std;  int main() {  	vector <int> a;//一个int的动态数组  	int b[10]={3,4,6,2,1,6,3};   	int x;  	for(int i=0; i<5; i++) {  		cin>>x;  		a.push_back(x);  	}  	//输出  	cout<<"a=";  	for(int i=0; i<a.size(); i++) {  		cout<<a[i]<<" ";  	}  	cout<<endl;   	a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的  	//位置插入b的第3个元素到第5个元素(不包括b+6),  	//如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8  	//输出  	cout<<"a=";  	for(int i=0; i<a.size(); i++) {  		cout<<a[i]<<" ";  	}  	return 0;  }

结论:

7 8 9 0 1  a=7 8 9 0 1  a=7 2 1 6 8 9 0 1

7.其他常用方法

c.assign(beg,end)  将(beg; end)区间中的数据赋值给c。  c.assign(n,elem) 将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) // 删除pos位置的数据,传回下一个数据的位置。  c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。  c.front()    传回第一个数据。  get_allocator  使用构造函数返回一个拷贝。  c.insert(pos,elem) // 在pos位置插入一个elem拷贝,传回新数据位置  c.insert(pos,n,elem) // 在pos位置插入n个elem数据,无返回值  c.insert(pos,beg,end) // 在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) // 将c1和c2元素互换



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:C++知识 浏览: