函数不应该有包括像vector或者其他标准库类型的形参,调用含有非引用类型的vector形参的函数将会复制vector中的每一个元素,将会导致内存资源浪费。应该考虑使用引用的形参类型,而引用形参在使用时可能会有意无意更改原来vector中的元素值,这就会导致原有数据的丢失。
数组有两个特征:一是数组不能复制,要想得到数组中的元素,必须将数组中的元素一一复制,二是使用数组名时,数组名会自动转化为之相期第一个元素的指针。由于数组不能复制,因此无法利用数组的类型的形参。
一般来说,应该通过传递指向容器中需要处理的元素的迭代器来间接地传递容器。形参中传递迭代器或者数组的指针,在使用时通过解引用可以间接访问容器或者数组中的内容。
void main()
{
vector<string>vStr(10,"hello!");
char ch[10]={'0','1','2','3','4','5','6','7','8','9'};
vector<string>::iterator iter1=vStr1.begin();
vector<string>::iterator iter2=vStr1.end();
isize_t sz=sizeof(ch)/sizefo(ch[0]);
printvector(iter1,iter2 );
printchar(ch,sz );
int ia[]={0,1,2,3,4,5,6,7,8,9}
print(ia,sz);
}
void printvector(vector<string>::iterator pBegin, vector<string >::iterator pEnd )
{
while(pBegin!=pEnd)
{
cout<<*pBegin;
if(pBegin!=pEnd)
cout<<" ";
pBegin++;
}
cout<<endl;
}
void printchar(char *pChar,size_t size)
{
size_t sz=0;
while(sz!=size)
{
cout<<*(pChar+sz);
if(sz!=size)
cout<<" ";
sz++;
}
cout<<endl;
}
程序将依次输出vStr1和ch中的所有元素。
void printvalues(int ia[],size_t size)
{
for(size_t sz=0;sz<size;sz++)
{
cout<<ia[sz]<<endl;
}
}
输出数组中的所有元素。
数组有两个特征:一是数组不能复制,要想得到数组中的元素,必须将数组中的元素一一复制,二是使用数组名时,数组名会自动转化为之相期第一个元素的指针。由于数组不能复制,因此无法利用数组的类型的形参。
一般来说,应该通过传递指向容器中需要处理的元素的迭代器来间接地传递容器。形参中传递迭代器或者数组的指针,在使用时通过解引用可以间接访问容器或者数组中的内容。
void main()
{
vector<string>vStr(10,"hello!");
char ch[10]={'0','1','2','3','4','5','6','7','8','9'};
vector<string>::iterator iter1=vStr1.begin();
vector<string>::iterator iter2=vStr1.end();
isize_t sz=sizeof(ch)/sizefo(ch[0]);
printvector(iter1,iter2 );
printchar(ch,sz );
int ia[]={0,1,2,3,4,5,6,7,8,9}
print(ia,sz);
}
void printvector(vector<string>::iterator pBegin, vector<string >::iterator pEnd )
{
while(pBegin!=pEnd)
{
cout<<*pBegin;
if(pBegin!=pEnd)
cout<<" ";
pBegin++;
}
cout<<endl;
}
void printchar(char *pChar,size_t size)
{
size_t sz=0;
while(sz!=size)
{
cout<<*(pChar+sz);
if(sz!=size)
cout<<" ";
sz++;
}
cout<<endl;
}
程序将依次输出vStr1和ch中的所有元素。
void printvalues(int ia[],size_t size)
{
for(size_t sz=0;sz<size;sz++)
{
cout<<ia[sz]<<endl;
}
}
输出数组中的所有元素。