Fork me on GitHub

9/15/2010

[C++] Pass vector which is not allowed to change to a funciton by constant reference

如下程式碼所述,使用 const 是一個好的習慣,在可讀性上可以明確的表示某變數不為更動,針對成員函式宣告 const 也可以表明該成員函式不會更動到所屬物件的資料成員。

那麼當要傳遞 vector 類型的資料到函數當中要怎麼利用 const 呢,這邊要注意的事如果你在函式當中使用 iterator 操作了該 vector 的話,就會造成 cannot convert from 'std::_Vector_const_iterator<_Ty,_Alloc>' to 'std::_Vector_iterator<_Ty,_Alloc>' 類似的錯誤。

原因就是容器當中若你要使用不更動容器內容的 iterator,應該要改用 const_iterator,所以只要把 iterator 改成 const_iterator 就可以利用 const & by reference 的方式把 vector 傳進函式當中並且確保他不會被更動!


#include <vector>
using namespace std;

int sumOfVector(const vector<int> &vec)
{
  int sum = 0;

  //typedef vector<int>::iterator intVect; // Error
  typedef vector<int>::const_iterator intVect; // Good!

  intVect itBegin = vec.begin();
  intVect itEnd   = vec.end(); 

  for (intVect it = itBegin; it != itEnd; it++)
    sum += *it;

  return sum;

}

int main()
{
  vector<int> vec(10, 1);
  int sum = sumOfVector(vec);

  return 1;

}

...

No comments:

Post a Comment