void comp(vector<int>&v1,vector<int>&v2)
{
if(v1==v2)//两个容器(vector)是否相等,相等返回true,走if,
//不相等则跳过if。(运用到==运算符)
//if(v1!=v2)//两个容器(vector)是否不等,不等返回true,走if
//不相等则跳过if。(运用到!=运算符)
{
return;
}
vector<int>t;
t=v1.size()>v2.size()?v1:v2;
//将较大的vector赋值给t(运用到=运算符)
其余的共同操作则直接在容器后写.共同操作函数名()即可。
其余共同操作请查阅网上或者更全的C++资料。
listslist;和vectorivec;
是产生空的容器listilist(1024);
产生指定大小容器,其中每个元素以其默认值作为初值(int,double这类语言内置的算术类型,其默认值为0)vectorivec(10,-1);
产生指定大小容器并为每个元素指定初值(在这里每个元素初值是-1)list<string>slist;//空容器
//给list添加元素
list<string>slist2(slist);//将slist复制给slist2
容器.insert()函数是重载函数,支持在容器的指定位置前插入1个或n个元素(元素值由我规定或者是默认值)
举几个例子:
#include
#include
using namespace std;
template<typename IteratorType,typename elemType>IteratorType find(IteratorType first,IteratorType last,const elemType &value)
{
for(;first!=last;++first)
{
if(value==*first)
{
return first;
}
}
return last;//走到这里证明没找到和value一样的元素,直接返回last指针。。。
}
template<typename elemType>
void display(const vector<elemType>&vec,ostream &os=cout)
{
typename vector<elemType>::const_iterator iter=vec.begin();//原书中未在vector前加typename,你不加,编译器给你报错。(去掉试试),记下!//iterator的定义
typename vector<elemType>::const_iterator end_it=vec.end();//如果是面对const vector,则用const_iterator来进行操作//iterator的定义
//如果面对vector,就用iterator即可
//若vec是空vector,则iter=end_it,for循环不会被执行
for(;iter!=end_it;++iter)
{
os<<*iter<<' ';
}
os<<endl;
}
int main()
{
string sval("Part Two");
string alist[3]={"wocao","Part Two","aa"};
vector<string>slist(alist,alist+3);//不要在slist和(之间加=!
vector<string>::iterator it=find(slist.begin(),slist.end(),sval);
//s example\main.cpp|10|error: no matching function for call to 'find(std::__cxx11::list >::iterator, std::__cxx11::list >::iterator, std::__cxx11::string&)'|
//出现此错误信息,证明find函数没有被定义,需要定义或另包含一个头文件,记下!
cout<<*it<<endl;
slist.insert(it,8,string("dummy"));//在value(dummy)前插入count(8)个元素,这些元素的值都和value相同
//s example\main.cpp|25|error: no match for 'operator<' (operand types are 'int' and 'std::__cxx11::list >::iterator {aka std::_List_iterator >}')|
//出现此错误信息,证明有两个类型不匹配。
display(slist);
cout<<endl;
int ia1[7]={1,1,2,3,5,55,89};
int ia2[4]={8,13,21,34};
vector<int>elems(ia1,ia1+7);
vector<int>::iterator it2=find(elems.begin(),elems.end(),55);
elems.insert(it2,ia2,ia2+4);//在position(it)前插入[first,last)所标示的各个元素,这个左闭右开的意思是first所指元素可被插入到某容器中,而last所指元素不可以,因为last指向最后一个元素的下一个位置
display(elems);
//elems.insert(it2);
//上面这么写会报错,即s example\main.cpp|48|error: no matching function for call to 'std::vector::insert(std::vector::iterator&)'|
//证明被调函数没有一个重载函数与其调用方式对应。。。。
//display(elems);
return 0;
}
其中:
string sval("Part Two");
string alist[3]={"wocao","Part Two","aa"};
vector<string>slist(alist,alist+3);//不要在slist和(之间加=!
vector<string>::iterator it=find(slist.begin(),slist.end(),sval);
//s example\main.cpp|10|error: no matching function for call to 'find(std::__cxx11::list >::iterator, std::__cxx11::list >::iterator, std::__cxx11::string&)'|
//出现此错误信息,证明find函数没有被定义,需要定义或另包含一个头文件,记下!
cout<<*it<<endl;
slist.insert(it,8,string("dummy"));//在value(dummy)前插入count(8)个元素,这些元素的值都和value相同
//s example\main.cpp|25|error: no match for 'operator<' (operand types are 'int' and 'std::__cxx11::list >::iterator {aka std::_List_iterator >}')|
//出现此错误信息,证明有两个类型不匹配。
display(slist);
cout<<endl;
这个insert函数是该重载函数:
void insert(iterator position,int count,elemType value)
int ia1[7]={1,1,2,3,5,55,89};
int ia2[4]={8,13,21,34};
vector<int>elems(ia1,ia1+7);
vector<int>::iterator it2=find(elems.begin(),elems.end(),55);
elems.insert(it2,ia2,ia2+4);//在position(it)前插入[first,last)所标示的各个元素,这个左闭右开的意思是first所指元素可被插入到某容器中,而last所指元素不可以,因为last指向最后一个元素的下一个位置
display(elems);
//elems.insert(it2);
//上面这么写会报错,即s example\main.cpp|48|error: no matching function for call to 'std::vector::insert(std::vector::iterator&)'|
//证明被调函数没有一个重载函数与其调用方式对应。。。。
//display(elems);
return 0;
这个insert函数是该重载函数:
void insert(iterator1 position,iteratior2 first,iteraotr2 last)
iterator insert(iterator position)
可在position之前插入元素。元素的初值为其所属类型的默认值。slist.erase(it1,it1+num_tries);
。必须传入两个泛型指针(如it1、it2)给erase()