「プログラミング言語C++第四版」について気が付いたことなど (4)

(原書の)コード例の間違い


13.6.4.1 reserve()

template < typename T, typename A >
void vector < T, A >:: reserve( size_ type newalloc) // 欠陥のある最初の版
{
  if (newalloc <= capacity()) return; // 確保分を減らすことはない
  vector < T, A > v( newalloc); // 新しい要素数でvectorを作る
  copy( vb. elem, vb. elem + size(), v. begin());// 全要素をコピー
  vb. space = size();
  swap(∗ this, v); // 新しい値を入れる
} // 古い値を暗黙裏に解放

原書のコード

template < typename T, typename A >
void vector < T, A >:: reserve( size_ type newalloc) // flawed first attempt
{
  if (newalloc <= capacity()) return; // never decrease allocation
  vector < T, A > v( newalloc); // make a vector with the new capacity
  copy( elem, elem + size(), v. begin());// copy elements
  vb. space = size();
  swap(∗ this, v); // install new value
} // implicitly release old value

邦訳でも原書でもvbはvectorの(vector_base型の)メンバ変数として (大分前の §13.6.2 の中ほどのコード例で)宣言されている。vectorがvector_baseから派生していのるであれば原著のようにvb.は要らないが、そうではないのでこれは邦訳の方が正しい

コメントを残す