通常,函數不應該有 vector 或其他標準庫容器類型的形參。調用含有普通的非引用 vector 形參的函數將會複製 vector 的每一個元素。因此,調用含有普通的非引用vector作爲形參的函數,無論效率還是資源利用率,都是極大的浪費。
從避免複製 vector 的角度出發,應考慮將形參聲明爲引用類型。但是,事實上,C++ 程序員傾向於通過傳遞指向容器中需要處理的元素的迭代器來傳遞容器:
考慮下面兩個容器的傳遞:
#include<iostream>
#include<vector>
using namespace std;
void print_vector_pos(vector<int>::const_iterator beg,vector<int>::const_iterator end)
{
while(beg!=end)
{
cout<<*beg++;
if(beg!=end)
{
cout<<" ";
}
}
cout<<endl;
}
void print_vector_copy(vector<int> coll)
{
vector<int>::iterator pos;
for(pos=coll.begin();pos!=coll.end();)
{
cout<<*pos++;
if(pos!=coll.end())
{
cout<<" ";
}
}
cout<<endl;
}
int main()
{
int a[]={11,0,2,4,9,11,23,123,231,45,41,56};
vector<int> coll(a,a+12);//coll(a[0],a[0]+5);//注意區別
print_vector_copy(coll);
print_vector_pos(coll.begin(),coll.end());
system("pause");
return 0;
}
直接傳遞迭代器肯定優於傳遞一個容器的副本。之前在做畢業設計時,就傳遞了容器作爲形參,估計得改了。。