本文目录
- vector的具体用法
- vector的使用方法
- vector
的使用方法 - c++中vector的作用是什么
- vector c++ 用法是什么
- c++里vector怎么用
- 求vector用法
- vector的详细说明
- vector的用法
- java中Vector的用法
vector的具体用法
/* 为了找到第k个小的数,其算法是先将这个数列排序,然后取出 第k个数的元素就行,用stl储存数组*/#ifndef _FIND_MIN_#define _FIND_MIN_#include 《vector》#include 《iostream》using namespace std;void Find_min(){ //首先获得数组 vector《int》 ivec; //储存数据 int i_num,temp,k; //输入数据,temp用于临时交换数据时储存数据 cout《《“请输入n个整数(ctrl+z to end):“《《endl; while(cin》》i_num) ivec.push_back(i_num); //依次储存 //输出数据流 cout《《“你输入的数据流是:“《《endl; for(vector《int》::size_type i=0;i《ivec.size();++i) cout《《ivec[i]《《“ “; cout《《endl; //开始排序 for(vector《int》::size_type i=0;i《ivec.size();++i) for(vector《int》::size_type j=i+1;j《ivec.size();++j) if(ivec[j]《ivec[i]) { temp=ivec[i];ivec[i]=ivec[j];ivec[j]=temp;} //交换数据 cin.clear(); cin.sync(); //刷新数据流 cout《《“请输入你想要的第k个小的数的k:“《《endl; cin》》k; //输出排序后的数据流 cout《《“为了便于你思考,排序后的数据流是(你就很容易找到):“《《endl; for(vector《int》::size_type i=0;i《ivec.size();++i) cout《《ivec[i]《《“ “; cout《《endl; cout《《“第k个小的数是:“《《ivec[k-1]《《endl; //输出k元素}#endif
vector的使用方法
这种使用方式是在不支持缺省模版参数值的编译器下使用的,在这种情况下,我们必须显示提供一个分配器(allocator);所以在这种情况下,如果想定义一个包含string类型的一个vector,我们可以这样写:vector《 string,allocator 》 myStrVec;如果我们在一个完全支持标准c++的编译器下面。我们只要指定元素类型就可以,这样的话,上面的定义可以简略成这样:vector《 string》 myStrVec;所以,如果用的是vc6.0那么,那么用后面一种定义方式就可以。
vector的使用方法
在c++中,vector是一个十分有用的容器。作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
使用vector需要注意以下几点:
1、如果你要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且效率会很低;
2、Vector作为函数的参数或者返回值时,需要注意它的写法:double Distance(vector《int》&a, vector《int》&b) 其中的“&”绝对不能少。
扩展资料
vector的基本操作:
(1)头文件#include《vector》
(2)创建vector对象,vector《int》 vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout《《vec《《endl;记住下标是从0开始的。
(5)使用迭代器访问元素
vector《int》::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout《《*it《《endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始。
c++中vector的作用是什么
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先,打开c++编译器,构造一个int类型的空vector向量。
2、程序运行结果如图,可以看到vector的size为0。
3、如红框勾选所示,构造了6个元素值为20的vector向量。
4、运行结果显示,成功的构造了6个元素为20的向量。
5、以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。
6、以下,就是程序运行结果了。
vector c++ 用法是什么
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先,打开c++编译器,构造一个int类型的空vector向量。
2、程序运行结果如图,可以看到vector的size为0。
3、如红框勾选所示,构造了6个元素值为20的vector向量。
4、运行结果显示,成功的构造了6个元素为20的向量。
5、以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。
6、以下,就是程序运行结果了。
基本函数实现
1、构造函数
vector():创建一个空vector
vector(int nSize):创建一个vector,元素个数为nSize
vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
vector(const vector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
2、增加函数
void push_back(const T& x):向量尾部增加一个元素X
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
实例:
#include 《string.h》#include 《vector》#include 《iostream》using namespace std; int main(){ vector《int》obj;//创建一个向量存储容器 int for(int i=0;i《10;i++) // push_back(elem)在数组最后添加数据 { obj.push_back(i); cout《《obj[i]《《“,“; } for(int i=0;i《5;i++)//去掉数组最后一个数据 { obj.pop_back(); } cout《《“\n“《《endl; for(int i=0;i《obj.size();i++)//size()容器中实际数据个数 { cout《《obj[i]《《“,“; } return 0;}
c++里vector怎么用
(1)vector《 类型 》 标识符 ;(2)vector《 类型 》 标识符(最大容量) ;(3)vector《 类型 》 标识符(最大容量,初始所有值);(4) int i = {12,3,4,5};vector《 类型 》 vi(i , i+2); //得到i索引值为3以后的值 ; (5)vector《 vector《int》 》 //vi 定义2维的容器;记得一定要有空格,不然会报错vector《 int 》 line // 在使用的时候一定要首先将vi个行进行初始化; for(int i = 0 ; i 《 10 ; i ++) { vector.push_back(line); } /// 个人认为使用vector定义二维数组很好,因为是长度可以不预先确定。很好。 (6)C++ Vector排序vector《 int 》 vi ; vi.push_back(1); vi.push_back(3); vi.push_back(0); sort(vi.begin() , vi.end()); /// /小到大 reverse(vi.begin(),vi.end()) /// 从大道小 (7)顺序访问vector 《 int 》 vi ; for( int i = 0 ; i 《 10 ; i ++) { vector.push_back(i); } for(int i = 0 ; i 《 10 ; i ++) /// 第一种调用方法 { cout 《《vector[i] 《《“ “ ; } for(vector《int》::iterator it = vi.begin() ; it !=vi.end() ; it++) ///第二种调用方法 { cout 《《 *it 《《 “ “ ; } (8)寻找vector 《 int 》 vi ; for( int i = 0 ; i 《 10 ; i ++) { vector.push_back(i); } vector 《 int 》::interator it = find(vi.begin() , vi.end,3) ; cout 《《 *it 《《 endl ; ///返回容器内找到值的位置。 (9)使用数组对C++ Vector进行初始化int i ={1,2,3,4,5,6,7,78,8} ; ///第一种 vector《int》 vi(i+1,i+3); ///从第2个元素到第三个元素 for(vector 《int》::interator it = vi.begin() ; it != vi.end() ; it++) { cout 《《 *it 《《“ “ ; } (10) 结构体类型struct temp { public : string str ; public : int id ; }tmp int main() { vector 《temp》 t ; temp w1 ; w1.str = “Hellowor“ ; w1.id = 1 ; t.push_back(t1); cout 《《 w1.str 《《 “,“ 《《w1.id 《《endl ; return 0 ; } vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 必须包含相关的头文件 。
求vector用法
1.vector 的数据的存入和输出:#include《stdio.h》#include《vector》#include 《iostream》using namespace std;void main(){ int i = 0; vector《int》 v; for( i = 0; i 《 10; i++ ) { v.push_back( i );//把元素一个一个存入到vector中 } /* v.clear()*/ 对存入的数据清空for( i = 0; i 《 v.size(); i++ )//v.size() 表示vector存入元素的个数 { cout 《《 v[ i ] 《《 “ “; //把每个元素显示出来 } cont 《《 endl;} 注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:vector《int》::iterator iter; /*iterator 抽象了指针的绝大部分基本特征*/for( iter = v.begin(); iter != v.end(); iter++ ) { cout 《《 *iter 《《 endl;}2. 对于二维vector的定义。1)定义一个10个vector元素,并对每个vector符值1-10。#include《stdio.h》#include《vector》#include 《iostream》using namespace std;void main(){ int i = 0, j = 0;//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。所以每一行的长度是可以变化的。之所以用到vector《int》(0)是对vector初始化,否则不能对vector存入元素。 vector《 vector《int》 》 Array( 10, vector《int》(0) ); for( j = 0; j 《 10; j++ ) { for ( i = 0; i 《 9; i++ ) { Array[ j ].push_back( i ); } } for( j = 0; j 《 10; j++ ) { for( i = 0; i 《 Array[ j ].size(); i++ ) { cout 《《 Array[ j ][ i ] 《《 “ “; } cout《《 endl; }}2)定义一个行列都是变化的数组。#include《stdio.h》#include《vector》#include 《iostream》using namespace std;void main(){ int i = 0, j = 0; vector《 vector《int》 》 Array; vector《 int 》 line; for( j = 0; j 《 10; j++ ) { Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。 for ( i = 0; i 《 9; i++ ) { Array[ j ].push_back( i ); } } for( j = 0; j 《 10; j++ ) { for( i = 0; i 《 Array[ j ].size(); i++ ) { cout 《《 Array[ j ][ i ] 《《 “ “; } cout《《 endl; }}使用 vettor erase 指定元素#include “iostream“#include “vector“using namespace std;int main(){ vector《int》 arr; arr.push_back(6); arr.push_back(8); arr.push_back(3); arr.push_back(8); for(vector《int》::iterator it=arr.begin(); it!=arr.end(); ) { if(* it == 8) { it = arr.erase(it); } else { ++it; } } cout 《《 “After remove 8:\n“; for(vector《int》::iterator it = arr.begin(); it 《 arr.end(); ++it) { cout 《《 * it 《《 “ “; } cout 《《 endl;}#include 《iostream》#include 《algorithm》#include 《functional》#include 《vector》using namespace std;void main(){int iarray={0,1,2,3,4,5,6,6,6,7,8};vector《int》 ivector(iarray,iarray+sizeof(iarray)/sizeof(int));int iarray1={6,6};vector《int》 ivector1(iarray1,iarray1+sizeof(iarray1)/sizeof(int)); int iarray2={5,6};vector《int》 ivector2(iarray2,iarray2+sizeof(iarray2)/sizeof(int));int iarray3={0,1,2,3,4,5,7,7,7,9,7};vector《int》 ivector3(iarray3,iarray3+sizeof(iarray3)/sizeof(int));//找出ivector之中相邻元素值相等的第一个元素cout《《*adjacent_find(ivector.begin(),ivector.end())《《endl;//找出ivector之中元素值为6的元素个数cout《《count(ivector.begin(),ivector.end(),6)《《endl;//找出ivector之中小于7的元素个数cout《《count_if(ivector.begin(),ivector.end(),bind2nd(less《int》(),7))《《endl;//找出ivector之中元素值为4的第一个元素所在位置的元素cout《《*find(ivector.begin(),ivector.end(),4)《《endl;//找出ivector之中大于2的第一个元素所在位置的元素cout《《*find_if(ivector.begin(),ivector.end(),bind2nd(greater《int》(),2))《《endl; //找出ivector之中子序列ivector1所出现的最后一个位置,再往后3个位置的元素cout《《*(find_end(ivector.begin(),ivector.end(),ivector1.begin(),ivector1.end())+3)《《endl;//找出ivector之中子序列ivector1所出现的第一个位置,再往后3个位置的元素cout《《*(find_first_of(ivector.begin(),ivector.end(),ivector1.begin(),ivector1.end())+3)《《endl; //子序列ivector2在ivector中出现的起点位置元素cout《《*search(ivector.begin(),ivector.end(),ivector2.begin(),ivector2.end())《《endl;//查找连续出现3个6的起点位置元素cout《《*search_n(ivector.begin(),ivector.end(),3,6,equal_to《int》())《《endl;//判断两个区间ivector和ivector3相等否(0为假,1为真)cout 《《 equal(ivector.begin(), ivector.end(), ivector3.begin()) 《《 endl;//查找区间ivector3在ivector中不匹配点的位置pair《int*,int*》result=mismatch(ivector.begin(),ivector.end(),ivector3.begin());cout《《 result.first - ivector.begin() 《《 endl; }#include 《iostream》#include 《algorithm》#include 《functional》#include 《vector》using namespace std;class even_by_two{ //类定义形式的函数对象public:int operator()() const{return _x+=2;}private:static int _x;};int even_by_two::_x=0; //静态数据成员初始化void main(){int iarray={0,1,2,3,4,5,6,6,6,7,8};int iarray1={0,1,2,3,4,4,5,5,6,6,6,6,6,7,8};vector《int》 ivector(iarray,iarray+sizeof(iarray)/sizeof(int));vector《int》 ivector1(iarray+6,iarray+8); vector《int》 ivector2(iarray1,iarray1+sizeof(iarray1)/sizeof(int));ostream_iterator《 int 》 output( cout, “ “ ); //定义流迭代器用于输出数据//迭代遍历ivector1区间,对每一个元素进行even_by_two操作 generate(ivector1.begin(),ivector1.end(),even_by_two());copy(ivector1.begin(),ivector1.end(),output);cout《《endl;//迭代遍历ivector的指定区间(起点和长度),对每一个元素进行even_by_two操作 generate_n(ivector.begin(),3,even_by_two());copy(ivector.begin(),ivector.end(),output);cout《《endl;//删除元素6 remove(ivector.begin(),ivector.end(),6);copy(ivector.begin(),ivector.end(),output);cout《《endl; //删除(实际并未从原序列中删除)元素6,结果置于另一个区间 vector《int》 ivector3(12);remove_copy(ivector.begin(),ivector.end(),ivector3.begin(),6);copy(ivector3.begin(),ivector3.end(),output);cout《《endl;//删除(实际并未从原序列中删除)小于6的元素remove_if(ivector.begin(),ivector.end(),bind2nd(less《int》(),6));copy(ivector.begin(),ivector.end(),output);cout《《endl; //删除(实际并未从原序列中删除)小于7的元素,结果置于另一个区间,remove_copy_if(ivector.begin(),ivector.end(),ivector3.begin(),bind2nd(less《int》(),7));copy(ivector3.begin(),ivector3.end(),output);cout《《endl; //将所有的元素值6,改为元素值3replace(ivector.begin(),ivector.end(),6,3);copy(ivector.begin(),ivector.end(),output);cout《《endl; //将所有的元素值3,改为元素值5,结果放置到另一个区间replace_copy(ivector.begin(),ivector.end(),ivector3.begin(),3,5);copy(ivector3.begin(),ivector3.end(),output);cout《《endl; //将所有小于5的元素值,改为元素值2replace_if(ivector.begin(),ivector.end(),bind2nd(less《int》(),5),2);copy(ivector.begin(),ivector.end(),output);cout《《endl; //将所有的元素值8,改为元素值9,结果放置到另一个区间replace_copy_if(ivector.begin(),ivector.end(),ivector3.begin(),bind2nd(equal_to《int》(),8),9);copy(ivector3.begin(),ivector3.end(),output);cout《《endl; //逆向重排每一个元素reverse(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),output);cout《《endl; //逆向重排每一个元素,结果置于另一个区间reverse_copy(ivector.begin(),ivector.end(),ivector3.begin());copy(ivector3.begin(),ivector3.end(),output);cout《《endl; //旋转(互换元素)[first,middle), 和[middle,end)rotate(ivector.begin(),ivector.begin()+4,ivector.end());copy(ivector.begin(),ivector.end(),output);cout《《endl; //旋转(互换元素)[first,middle], 和[middle,end],结果置于另一个区间,rotate_copy(ivector.begin(),ivector.begin()+5,ivector.end(),ivector3.begin());copy(ivector3.begin(),ivector3.end(),output);cout《《endl; }#include 《iostream》#include 《algorithm》#include 《functional》#include 《vector》using namespace std;void main(){int iarray={26,17,15,22,23,33,32,40};vector《int》 ivector(iarray,iarray+sizeof(iarray)/sizeof(int));// 查找并输出最大、最小值元素cout《《*max_element(ivector.begin(),ivector.end())《《endl;cout《《*min_element(ivector.begin(),ivector.end())《《endl;//将ivector.begin()+4-ivector.begin()各元素排序,//放进[ivector.begin(),ivector.begin()+4]区间。剩余元素不保证维持原来相对次序partial_sort(ivector.begin(),ivector.begin()+3,ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//局部排序并复制到别处vector《int》 ivector1(5);partial_sort_copy(ivector.begin(),ivector.end(),ivector1.begin(),ivector1.end());copy(ivector1.begin(),ivector1.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//排序,缺省为递增。sort(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//将指定元素插入到区间内不影响区间原来排序的最低、最高位置cout《《*lower_bound(ivector.begin(),ivector.end(),24)《《endl;cout《《*upper_bound(ivector.begin(),ivector.end(),24)《《endl;//对于有序区间,可以用二分查找方法寻找某个元素 cout《《binary_search(ivector.begin(),ivector.end(),33)《《endl; cout《《binary_search(ivector.begin(),ivector.end(),34)《《endl;//下一个排列组合next_permutation(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//上一个排列组合prev_permutation(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//合并两个序列ivector和ivector1,并将结果放到ivector2中vector《int》 ivector2(13);merge(ivector.begin(),ivector.end(),ivector1.begin(),ivector1.end(),ivector2.begin());copy(ivector2.begin(),ivector2.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//将小于*(ivector.begin()+5)的元素放置在该元素之左//其余置于该元素之右。不保证维持原有的相对位置nth_element(ivector2.begin(),ivector2.begin()+5,ivector2.end());copy(ivector2.begin(),ivector2.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//排序,并保持原来相对位置stable_sort(ivector2.begin(),ivector2.end());copy(ivector2.begin(),ivector2.end(),ostream_iterator《int》(cout,“ “));cout《《endl;//针对一个有序区间,找出其中一个子区间,其中每个元素都与某特定元素值相同pair《vector《int》::iterator,vector《int》::iterator》 pairIte;pairIte=equal_range(ivector2.begin(),ivector2.end(),22);cout《《*(pairIte.first)《《endl; cout《《*(pairIte.second)《《endl;//合并两个有序序列,然后就地替换int iarray3 = { 1, 3, 5, 7, 2, 4, 6, 8 };vector《int》 ivector3(iarray3,iarray3+sizeof(iarray3)/sizeof(int));inplace_merge(ivector3.begin(), ivector3.begin()+ 4, ivector3.end());copy(ivector3.begin(),ivector3.end(), ostream_iterator《int》(cout, “ “)); cout《《endl; //以字典顺序比较序列ivector3和ivector4int iarray4 = { 1, 3, 5, 7,1, 5, 9, 3 };vector《int》 ivector4(iarray4,iarray4+sizeof(iarray4)/sizeof(int));cout《《 lexicographical_compare(ivector3.begin(),ivector3.end(),ivector4.begin(),ivector4.end()) 《《 endl}
vector的详细说明
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值 。和 string 对象一样,标准库将负责管理与存储元素相关的内存。我们把 vector称为容器,是因为它可以包含其他对象,能够存放任意类型的动态数组,增加和压缩数据。一个容器中的所有对象都必须是同一种类型的 。vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如Sales_items 对象)的 vector。vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型 。为了可以使用vector,必须在你的头文件中包含下面的代码:#include 《vector》vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:using std::vector;vector《int》 vInts;或者连在一起,使用全名:std::vector《int》 vInts;建议在代码量不大,并且使用的命名空间不多的情况下,使用全局的命名域方式:using namespace std;函数表述c.assign(beg,end) c.assign(n,elem)将(beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。传回索引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(c.begin()+pos,elem)//在pos位置插入一个elem拷贝,传回新数据位置c.insert(c.begin()+pos,n,elem)//在pos位置插入n个elem数据,无返回值c.insert(c.begin()+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元素互换swap(c1,c2)//同上操作。vector《Elem》 //创建一个空的vectorvector《Elem》 c1(c2)//复制一个vectorvector 《Elem》 c(n)//创建一个vector,含有n个数据,数据均已缺省构造产生vector 《Elem》 c(n,elem)//创建一个含有n个elem拷贝的vectorvector 《Elem》 c(beg,end)//创建一个以(beg;end)为区间的vectorc.~ vector 《Elem》()//销毁所有数据,释放内存operator返回容器中指定位置的一个引用。创建一个vectorvector容器提供了多种创建方法,下面介绍几种常用的。创建一个Widget类型的空的vector对象:vector《Widget》 vWidgets;创建一个包含500个Widget类型数据的vector:vector《Widget》 vWidgets(500);创建一个包含500个Widget类型数据的vector,并且都初始化为0:vector《Widget》 vWidgets(500,Widget(0));创建一个Widget的拷贝:vector《Widget》 vWidgetsFromAnother(vWidgets);向vector添加一个数据vector添加数据的缺省方法是push_back()。push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。例如:向vector《Widget》;中添加10个数据,需要如下编写代码:for(int i= 0;i《10; i++) {vWidgets.push_back(Widget(i));}获取vector中指定位置的数据vector里面的数据是动态分配的,使用push_back()的一系列分配空间常常决定于文件或一些数据源。如果想知道vector是否为空,可以使用empty(),空返回true,否则返回false。获取vector的大小,可以使用size()。例如,如果想获取一个vector v的大小,但不知道它是否为空,或者已经包含了数据,如果为空时想设置为 -1,你可以使用下面的代码实现:int nSize = v.empty() ? -1 : static_cast《int》(v.size());访问vector中的数据使用两种方法来访问vector。1、 vector::at()2、 vector::operatoroperator主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但at()是我们的首选,因为at()进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。由于operator容易造成一些错误,所以我们很少用它.删除vector中的数据vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(),pop_back(),clear()来删除数据,当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。remove()算法 如果要使用remove,需要在头文件中包含如下代码:#include 《algorithm》remove有三个参数:1、 iterator _First:指向第一个数据的迭代指针。2、 iterator _Last:指向最后一个数据的迭代指针。3、 predicate _Pred:一个可以对迭代操作的条件函数。条件函数条件函数是一个按照用户定义的条件返回是或否的结果,是最基本的函数指针,或是一个函数对象。这个函数对象需要支持所有的函数调用操作,重载operator()()操作。remove是通过unary_function继承下来的,允许传递数据作为条件。例如,假如想从一个vector《CString》;中删除匹配的数据,如果字串中包含了一个值,从这个值开始,从这个值结束。首先应该建立一个数据结构来包含这些数据,类似代码如下:#include 《functional》enum findmodes {FM_INVALID = 0,FM_IS,FM_STARTSWITH,FM_ENDSWITH,FM_CONTAINS};typedef struct tagFindStr {UINT iMode;CString szMatchStr;} FindStr;typedef FindStr* LPFINDSTR;然后处理条件判断:class FindMatchingString : public std::unary_function《CString,bool》 {public:FindMatchingString(const LPFINDSTR lpFS) :m_lpFS(lpFS) {}bool operator()(CString& szStringToCompare) const {bool retVal = false;switch (m_lpFS-》iMode) {case FM_IS: {retVal = (szStringToCompare == m_lpFDD-》szMatchStr);break;}case FM_STARTSWITH: {retVal = (szStringToCompare.Left(m_lpFDD-》szMatchStr.GetLength())== m_lpFDD-》szWindowTitle);break;}case FM_ENDSWITH: {retVal = (szStringToCompare.Right(m_lpFDD-》szMatchStr.GetLength())== m_lpFDD-》szMatchStr);break;}case FM_CONTAINS: {retVal = (szStringToCompare.Find(m_lpFDD-》szMatchStr) != -1);break;}}return retVal;}private:LPFINDSTR m_lpFS;};通过这个操作你可以从vector中有效地删除数据:FindStr fs;fs.iMode = FM_CONTAINS;fs.szMatchStr = szRemove;vs.erase(std::remove_if(vs.begin(),vs.end(),FindMatchingString(&fs)),vs.end());Remove(),remove等所有的移出操作都是建立在一个迭代范围上的,不能操作容器中的数据。所以在使用remove,实际上操作的时容器里数据的上面的。看到remove实际上是根据条件对迭代地址进行了修改,在数据的后面存在一些残余的数据,那些需要删除的数据。剩下的数据的位置可能不是原来的数据,但他们是不知道的。调用erase()来删除那些残余的数据。注意上面例子中通过erase()删除remove的结果和vs.enc()范围的数据。常见错误:no matching function for call to ‘std::vector,一般由定义的类型与存入的类型不匹配引起。
vector的用法
有的。
STL容器提供的增加元素的步骤,必须重复调用insert()或者push_back()等成员函数,于是boost.assign出现了。(boost库)
boost.assign库重载了赋值操作符,operator+=,逗号操作符operator,和括号操作符operator(),用简洁语法非常方便地对STL容器赋值或者初始化,在需要填入大量初值的地方很有用。
一个简单的例子:
#include 《iostream》#include 《vector》#include 《boost/assign.hpp》using namespace boost::assign; //启用assign库的功能using namespace std;int main(){vector《int》 v; //标准向量容器v += 1, 2, 3, 4, 5, 6, 7*8; //用operator+=和,填入数据return 0;}
java中Vector的用法
addElement(Object obj) 把组件加到向量尾部,同时大小加1,向量容量比以前大1 insertElementAt(Object obj, int index) 把组件加到所定索引处,此后的内容向后移动1 个单位 setElementAt(Object obj, int index) 把组件加到所定索引处,此处的内容被代替。Vector v=new Vector(); 上面三个方法根据不同需求使用。