4

これはちょっと単純な質問だと思います。

ベクトルとリストの両方にプッシュ機能とポップ機能があり、さらに重要なことに、反復処理が可能です。

for ( auto value : items )
    ...

ただし、 std::vector と std::list は基本クラスを共有していないようです。したがって、問題は次のとおりです。どちらか (または実際には、実装に適合する他のもの) を受け入れる関数をどのように作成すればよいでしょうか?

std::list<int> a;
std::vector<int> b;
DoSomething(a);
DoSomething(b);

負担をかけずにやりたい。テンプレートが使用されている場合、非常識なエラー メッセージが表示されることはありません。たとえば、次のコード --

int a;
DoSomething(a);

--テンプレート内のどこかではなく、呼び出しサイトでコンパイル エラーが発生するはずです。

誰にもアイデアはありますか?

4

2 に答える 2

1

stl アルゴリズムのほとんどは、コンテナーからの抽象化のレイヤーとしてイテレーターを使用していました。

たとえば、sortsort には 2 つのランダム アクセス イテレータが必要です。

template <class RandomAccessIterator>
   void sort (RandomAccessIterator first, RandomAccessIterator last);

ほとんどのアルゴリズムは、このイディオムを使用して実装できます

実装する予定のアルゴリズムに応じて、4 種類の標準反復子から選択する必要があります。

これは、どのタイプがより適しているかを説明するリンクです

于 2013-06-28T01:02:14.603 に答える