2024年10月vector 用法(vector的具体用法)
⑴vector用法(vector的具体用法
⑵vector的具体用法
⑶/*为了找到第k个小的数,其算法是先将这个数列排序,然后取出第k个数的元素就行,用stl储存数组*/#ifndef_FIND_MIN_#define_FIND_MIN_#include《vector》#include《iostream》usingnamespacestd;voidFind_min(){//首先获得数组vector《int》ivec;//储存数据inti_num,temp,k;//输入数据,temp用于临时交换数据时储存数据cout《《“请输入n个整数(ctrl+ztoend):“《《endl;while(cin》》i_num)ivec.push_back(i_num);//依次储存//输出数据流cout《《“你输入的数据流是:“《《endl;for(vector《int》::size_typei=;i《ivec.size();++i)cout《《ivec[i]《《““;cout《《endl;//开始排序for(vector《int》::size_typei=;i《ivec.size();++i)for(vector《int》::size_typej=i+;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_typei=;i《ivec.size();++i)cout《《ivec[i]《《““;cout《《endl;cout《《“第k个小的数是:“《《ivec[k-]《《endl;//输出k元素}#endif
⑷vector的使用方法
⑸这种使用方式是在不支持缺省模版参数值的编译器下使用的,在这种情况下,我们必须显示提供一个分配器(allocator);所以在这种情况下,如果想定义一个包含string类型的一个vector,我们可以这样写:vector《string,allocator》myStrVec;如果我们在一个完全支持标准c++的编译器下面。我们只要指定元素类型就可以,这样的话,上面的定义可以简略成这样:vector《string》myStrVec;所以,如果用的是vc.那么,那么用后面一种定义方式就可以。
⑹vector的使用方法
⑺在c++中,vector是一个十分有用的容器。作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
⑻使用vector需要注意以下几点:
⑼如果你要表示的向量长度较长(需要为向量内部保存很多数,容易导致内存泄漏,而且效率会很低;
⑽Vector作为函数的参数或者返回值时,需要注意它的写法:doubleDistance(vector《int》&a,vector《int》&b)其中的“&”绝对不能少。
⑾vector的基本操作:
⑿头文件#include《vector》
⒀创建vector对象,vector《int》vec;
⒁尾部插入数字:vec.push_back(a);
⒂使用下标访问元素,cout《《vec《《endl;记住下标是从开始的。
⒃vector《int》::iteratorit;
⒄for(it=vec.begin();it!=vec.end();it++)
⒅cout《《*it《《endl;
⒆插入元素:??vec.insert(vec.begin()+i,a);在第i+个元素前面插入a;
⒇删除元素:??vec.erase(vec.begin()+);删除第个元素
⒈vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-];区间从开始。
⒉c++中vector的作用是什么
⒊c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
⒋工具/材料:电脑、c++编译器
⒌首先,打开c++编译器,构造一个int类型的空vector向量。
⒍程序运行结果如图,可以看到vector的size为。
⒎如红框勾选所示,构造了个元素值为的vector向量。
⒏运行结果显示,成功的构造了个元素为的向量。
⒐以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。
⒑以下,就是程序运行结果了。
⒒vectorc++用法是什么
⒓c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
⒔工具/材料:电脑、c++编译器
⒕首先,打开c++编译器,构造一个int类型的空vector向量。
⒖程序运行结果如图,可以看到vector的size为。
⒗如红框勾选所示,构造了个元素值为的vector向量。
⒘运行结果显示,成功的构造了个元素为的向量。
⒙以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。
⒚以下,就是程序运行结果了。
⒛vector():创建一个空vector
vector(intnSize):创建一个vector,元素个数为nSize
vector(intnSize,constt&t):创建一个vector,元素个数为nSize,且值均为t
vector(constvector&):复制构造函数
vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
voidpush_back(constT&x):向量尾部增加一个元素X
iteratorinsert(iteratorit,constT&x):向量中迭代器指向元素前增加一个元素x
iteratorinsert(iteratorit,intn,constT&x):向量中迭代器指向元素前增加n个相同的元素x
iteratorinsert(iteratorit,const_iteratorfirst,const_iteratorlast):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
#include《string.h》#include《vector》#include《iostream》usingnamespacestd;intmain(){??vector《int》obj;//创建一个向量存储容器int??for(inti=;i《;i++)//push_back(elem)在数组最后添加数据??{????obj.push_back(i);????cout《《obj[i]《《“,“;????}??for(inti=;i《;i++)//去掉数组最后一个数据??{????obj.pop_back();??}??cout《《“
“《《endl;??for(inti=;i《obj.size();i++)//size()容器中实际数据个数??{????cout《《obj[i]《《“,“;??}??return;}
c++里vector怎么用
vector《类型》标识符;()vector《类型》标识符(最大容量);()vector《类型》标识符(最大容量,初始所有值;()inti={,,,};vector《类型》vi(i,i+);//得到i索引值为以后的值;()vector《vector《int》》//vi定义维的容器;记得一定要有空格,不然会报错vector《int》line//在使用的时候一定要首先将vi个行进行初始化;for(inti=;i《;i++){vector.push_back(line);}///个人认为使用vector定义二维数组很好,因为是长度可以不预先确定。很好。()C++Vector排序vector《int》vi;vi.push_back();vi.push_back();vi.push_back();sort(vi.begin(),vi.end());////小到大reverse(vi.begin(),vi.end())///从大道小()顺序访问vector《int》vi;for(inti=;i《;i++){vector.push_back(i);}for(inti=;i《;i++)///第一种调用方法{cout《《vector[i]《《““;}for(vector《int》::iteratorit=vi.begin();it!=vi.end();it++)///第二种调用方法{cout《《*it《《““;}()寻找vector《int》vi;for(inti=;i《;i++){vector.push_back(i);}vector《int》::interatorit=find(vi.begin(),vi.end,);cout《《*it《《endl;///返回容器内找到值的位置。()使用数组对C++Vector进行初始化inti={,,,,,,,,};///第一种vector《int》vi(i+,i+);///从第个元素到第三个元素for(vector《int》::interatorit=vi.begin();it!=vi.end();it++){cout《《*it《《““;}()结构体类型structtemp{public:stringstr;public:intid;}tmpintmain(){vector《temp》t;tempw;w.str=“Hellowor“;w.id=;t.push_back(t);cout《《w.str《《“,“《《w.id《《endl;return;}vector类为内置数组提供了一种替代表示,与string类一样vector类是随标准C++引入的标准库的一部分,为了使用vector必须包含相关的头文件。
vector的数据的存入和输出:#include《stdio.h》#include《vector》#include《iostream》usingnamespacestd;voidmain(){inti=;vector《int》v;for(i=;i《;i++){v.push_back(i);//把元素一个一个存入到vector中}/*v.clear()*/对存入的数据清空for(i=;i《v.size();i++)//v.size()表示vector存入元素的个数{cout《《v[i]《《““;//把每个元素显示出来}cont《《endl;}注:你也可以用v.begin()和v.end()来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:vector《int》::iteratoriter;/*iterator抽象了指针的绝大部分基本特征*/for(iter=v.begin();iter!=v.end();iter++){cout《《*iter《《endl;}.对于二维vector的定义。)定义一个个vector元素,并对每个vector符值-。#include《stdio.h》#include《vector》#include《iostream》usingnamespacestd;voidmain(){inti=,j=;//定义一个二维的动态数组,有行,每一行是一个用一个vector存储这一行的数据。所以每一行的长度是可以变化的。之所以用到vector《int》()是对vector初始化,否则不能对vector存入元素。vector《vector《int》》Array(,vector《int》());for(j=;j《;j++){for(i=;i《;i++){Array[j].push_back(i);}}for(j=;j《;j++){for(i=;i《Array[j].size();i++){cout《《Array[j][i]《《““;}cout《《endl;}})定义一个行列都是变化的数组。#include《stdio.h》#include《vector》#include《iostream》usingnamespacestd;voidmain(){inti=,j=;vector《vector《int》》Array;vector《int》line;for(j=;j《;j++){Array.push_back(line);//要对每一个vector初始化,否则不能存入元素。for(i=;i《;i++){Array[j].push_back(i);}}for(j=;j《;j++){for(i=;i《Array[j].size();i++){cout《《Array[j][i]《《““;}cout《《endl;}}使用vettorerase指定元素#include“iostream“#include“vector“usingnamespacestd;intmain(){vector《int》arr;arr.push_back();arr.push_back();arr.push_back();arr.push_back();for(vector《int》::iteratorit=arr.begin();it!=arr.end();){if(*it==){it=arr.erase(it);}else{++it;}}cout《《“Afterremove:
“;for(vector《int》::iteratorit=arr.begin();it《arr.end();++it){cout《《*it《《““;}cout《《endl;}#include《iostream》#include《algorithm》#include《functional》#include《vector》usingnamespacestd;voidmain(){intiarray={,,,,,,,,,,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));intiarray={,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));intiarray={,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));intiarray={,,,,,,,,,,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));//找出ivector之中相邻元素值相等的第一个元素cout《《*adjacent_find(ivector.begin(),ivector.end())《《endl;//找出ivector之中元素值为的元素个数cout《《count(ivector.begin(),ivector.end(),)《《endl;//找出ivector之中小于的元素个数cout《《count_if(ivector.begin(),ivector.end(),bindnd(less《int》(),))《《endl;//找出ivector之中元素值为的第一个元素所在位置的元素cout《《*find(ivector.begin(),ivector.end(),)《《endl;//找出ivector之中大于的第一个元素所在位置的元素cout《《*find_if(ivector.begin(),ivector.end(),bindnd(greater《int》(),))《《endl;//找出ivector之中子序列ivector所出现的最后一个位置,再往后个位置的元素cout《《*(find_end(ivector.begin(),ivector.end(),ivector.begin(),ivector.end())+)《《endl;//找出ivector之中子序列ivector所出现的第一个位置,再往后个位置的元素cout《《*(find_first_of(ivector.begin(),ivector.end(),ivector.begin(),ivector.end())+)《《endl;//子序列ivector在ivector中出现的起点位置元素cout《《*search(ivector.begin(),ivector.end(),ivector.begin(),ivector.end())《《endl;//查找连续出现个的起点位置元素cout《《*search_n(ivector.begin(),ivector.end(),,,equal_to《int》())《《endl;//判断两个区间ivector和ivector相等否(为假,为真cout《《equal(ivector.begin(),ivector.end(),ivector.begin())《《endl;//查找区间ivector在ivector中不匹配点的位置pair《int*,int*》result=mismatch(ivector.begin(),ivector.end(),ivector.begin());cout《《result.first-ivector.begin()《《endl;}#include《iostream》#include《algorithm》#include《functional》#include《vector》usingnamespacestd;classeven_by_two{//类定义形式的函数对象public:intoperator()()const{return_x+=;}private:staticint_x;};inteven_by_two::_x=;//静态数据成员初始化voidmain(){intiarray={,,,,,,,,,,};intiarray={,,,,,,,,,,,,,,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));vector《int》ivector(iarray+,iarray+);vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));ostream_iterator《int》output(cout,““);//定义流迭代器用于输出数据//迭代遍历ivector区间,对每一个元素进行even_by_two操作generate(ivector.begin(),ivector.end(),even_by_two());copy(ivector.begin(),ivector.end(),output);cout《《endl;//迭代遍历ivector的指定区间(起点和长度,对每一个元素进行even_by_two操作generate_n(ivector.begin(),,even_by_two());copy(ivector.begin(),ivector.end(),output);cout《《endl;//删除元素remove(ivector.begin(),ivector.end(),);copy(ivector.begin(),ivector.end(),output);cout《《endl;//删除(实际并未从原序列中删除元素,结果置于另一个区间vector《int》ivector();remove_copy(ivector.begin(),ivector.end(),ivector.begin(),);copy(ivector.begin(),ivector.end(),output);cout《《endl;//删除(实际并未从原序列中删除小于的元素remove_if(ivector.begin(),ivector.end(),bindnd(less《int》(),));copy(ivector.begin(),ivector.end(),output);cout《《endl;//删除(实际并未从原序列中删除)小于的元素,结果置于另一个区间,remove_copy_if(ivector.begin(),ivector.end(),ivector.begin(),bindnd(less《int》(),));copy(ivector.begin(),ivector.end(),output);cout《《endl;//将所有的元素值,改为元素值replace(ivector.begin(),ivector.end(),,);copy(ivector.begin(),ivector.end(),output);cout《《endl;//将所有的元素值,改为元素值,结果放置到另一个区间replace_copy(ivector.begin(),ivector.end(),ivector.begin(),,);copy(ivector.begin(),ivector.end(),output);cout《《endl;//将所有小于的元素值,改为元素值replace_if(ivector.begin(),ivector.end(),bindnd(less《int》(),),);copy(ivector.begin(),ivector.end(),output);cout《《endl;//将所有的元素值,改为元素值,结果放置到另一个区间replace_copy_if(ivector.begin(),ivector.end(),ivector.begin(),bindnd(equal_to《int》(),),);copy(ivector.begin(),ivector.end(),output);cout《《endl;//逆向重排每一个元素reverse(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),output);cout《《endl;//逆向重排每一个元素,结果置于另一个区间reverse_copy(ivector.begin(),ivector.end(),ivector.begin());copy(ivector.begin(),ivector.end(),output);cout《《endl;//旋转(互换元素[first,middle),和[middle,end)rotate(ivector.begin(),ivector.begin()+,ivector.end());copy(ivector.begin(),ivector.end(),output);cout《《endl;//旋转(互换元素[first,middle],和[middle,end],结果置于另一个区间,rotate_copy(ivector.begin(),ivector.begin()+,ivector.end(),ivector.begin());copy(ivector.begin(),ivector.end(),output);cout《《endl;}#include《iostream》#include《algorithm》#include《functional》#include《vector》usingnamespacestd;voidmain(){intiarray={,,,,,,,};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()+-ivector.begin()各元素排序,//放进[ivector.begin(),ivector.begin()+]区间。剩余元素不保证维持原来相对次序partial_sort(ivector.begin(),ivector.begin()+,ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,““));cout《《endl;//局部排序并复制到别处vector《int》ivector();partial_sort_copy(ivector.begin(),ivector.end(),ivector.begin(),ivector.end());copy(ivector.begin(),ivector.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(),)《《endl;cout《《*upper_bound(ivector.begin(),ivector.end(),)《《endl;//对于有序区间,可以用二分查找方法寻找某个元素cout《《binary_search(ivector.begin(),ivector.end(),)《《endl;cout《《binary_search(ivector.begin(),ivector.end(),)《《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和ivector,并将结果放到ivector中vector《int》ivector();merge(ivector.begin(),ivector.end(),ivector.begin(),ivector.end(),ivector.begin());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,““));cout《《endl;//将小于*(ivector.begin()+)的元素放置在该元素之左//其余置于该元素之右。不保证维持原有的相对位置nth_element(ivector.begin(),ivector.begin()+,ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,““));cout《《endl;//排序,并保持原来相对位置stable_sort(ivector.begin(),ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,““));cout《《endl;//针对一个有序区间,找出其中一个子区间,其中每个元素都与某特定元素值相同pair《vector《int》::iterator,vector《int》::iterator》pairIte;pairIte=equal_range(ivector.begin(),ivector.end(),);cout《《*(pairIte.first)《《endl;cout《《*(pairIte.second)《《endl;//合并两个有序序列,然后就地替换intiarray={,,,,,,,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));inplace_merge(ivector.begin(),ivector.begin()+,ivector.end());copy(ivector.begin(),ivector.end(),ostream_iterator《int》(cout,““));cout《《endl;//以字典顺序比较序列ivector和ivectorintiarray={,,,,,,,};vector《int》ivector(iarray,iarray+sizeof(iarray)/sizeof(int));cout《《lexicographical_pare(ivector.begin(),ivector.end(),ivector.begin(),ivector.end())《《endl}
vector的详细说明
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储元素相关的内存。我们把vector称为容器,是因为它可以包含其他对象,能够存放任意类型的动态数组,增加和压缩数据。一个容器中的所有对象都必须是同一种类型的。vector是一个类模板(classtemplate)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存string对象的vector,或保存int值的vector,又或是保存自定义的类类型对象(如Sales_items对象)的vector。vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。为了可以使用vector,必须在你的头文件中包含下面的代码:#include《vector》vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:usingstd::vector;vector《int》vInts;或者连在一起,使用全名:std::vector《int》vInts;建议在代码量不大,并且使用的命名空间不多的情况下,使用全局的命名域方式:usingnamespacestd;函数表述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()返回容器中实际数据的个数。c.swap(c)//将c和c元素互换swap(c,c)//同上操作。vector《Elem》//创建一个空的vectorvector《Elem》c(c)//复制一个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;创建一个包含个Widget类型数据的vector:vector《Widget》vWidgets();创建一个包含个Widget类型数据的vector,并且都初始化为:vector《Widget》vWidgets(,Widget());创建一个Widget的拷贝:vector《Widget》vWidgetsFromAnother(vWidgets);向vector添加一个数据vector添加数据的缺省方法是push_back(。push_back(函数表示将数据添加到vector的尾部,并按需要来分配内存。例如:向vector《Widget》;中添加个数据,需要如下编写代码:for(inti=;i《;i++){vWidgets.push_back(Widget(i));}获取vector中指定位置的数据vector里面的数据是动态分配的,使用push_back()的一系列分配空间常常决定于文件或一些数据源。如果想知道vector是否为空,可以使用empty(,空返回true,否则返回false。获取vector的大小,可以使用size(。例如,如果想获取一个vectorv的大小,但不知道它是否为空,或者已经包含了数据,如果为空时想设置为-,你可以使用下面的代码实现:intnSize=v.empty()?-:static_cast《int》(v.size());访问vector中的数据使用两种方法来访问vector。、vector::at()、vector::operatoroperator主要是为了与C语言进行兼容。它可以像C语言数组一样操作。但at(是我们的首选,因为at(进行了边界检查,如果访问超过了vector的范围,将抛出一个例外。由于operator容易造成一些错误,所以我们很少用它.删除vector中的数据vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(,pop_back(,clear(来删除数据,当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。remove(算法如果要使用remove,需要在头文件中包含如下代码:#include《algorithm》remove有三个参数:、iterator_First:指向第一个数据的迭代指针。、iterator_Last:指向最后一个数据的迭代指针。、predicate_Pred:一个可以对迭代操作的条件函数。条件函数条件函数是一个按照用户定义的条件返回是或否的结果,是最基本的函数指针,或是一个函数对象。这个函数对象需要支持所有的函数调用操作,重载operator((操作。remove是通过unary_function继承下来的,允许传递数据作为条件。例如,假如想从一个vector《CString》;中删除匹配的数据,如果字串中包含了一个值,从这个值开始,从这个值结束。首先应该建立一个数据结构来包含这些数据,类似代码如下:#include《functional》enumfindmodes{FM_INVALID=,FM_IS,FM_STARTSWITH,FM_ENDSWITH,FM_CONTAINS};typedefstructtagFindStr{UINTiMode;CStringszMatchStr;}FindStr;typedefFindStr*LPFINDSTR;然后处理条件判断:classFindMatchingString:publicstd::unary_function《CString,bool》{public:FindMatchingString(constLPFINDSTRlpFS):m_lpFS(lpFS){}booloperator()(CString&szStringTopare)const{boolretVal=false;switch(m_lpFS-》iMode){caseFM_IS:{retVal=(szStringTopare==m_lpFDD-》szMatchStr);break;}caseFM_STARTSWITH:{retVal=(szStringTopare.Left(m_lpFDD-》szMatchStr.GetLength())==m_lpFDD-》szWindowTitle);break;}caseFM_ENDSWITH:{retVal=(szStringTopare.Right(m_lpFDD-》szMatchStr.GetLength())==m_lpFDD-》szMatchStr);break;}caseFM_CONTAINS:{retVal=(szStringTopare.Find(m_lpFDD-》szMatchStr)!=-);break;}}returnretVal;}private:LPFINDSTRm_lpFS;};通过这个操作你可以从vector中有效地删除数据:FindStrfs;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(范围的数据。常见错误:nomatchingfunctionforcallto‘std::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?+=?,?,?,?,?,?,?*;??//用operator+=和,填入数据 return?;}
java中Vector的用法
addElement(Objectobj)把组件加到向量尾部,同时大小加,向量容量比以前大insertElementAt(Objectobj,intindex)把组件加到所定索引处,此后的内容向后移动个单位setElementAt(Objectobj,intindex)把组件加到所定索引处,此处的内容被代替。Vectorv=newVector();上面三个方法根据不同需求使用。