呼び出すときstd::sort()
にstd::array
:
#include <vector>
#include <array>
#include <algorithm>
int main() {
std::vector<int> foo{4, 1, 2, 3};
sort(begin(foo), end(foo));
std::array<int, 4> foo2{4, 1, 2, 3};
sort(begin(foo2), end(foo2));
}
gccとclangの両方で、並べ替えのエラーが返されますstd::array
-clang
エラー:宣言されていない識別子 'sort'の使用; 「std :: sort」という意味ですか?
std::sort(begin(foo2), end(foo2))
問題を修正するための変更。
MSVCは、上記のコードを記述どおりにコンパイルします。
なぜ治療の違いの間std::vector
とstd::array
、どのコンパイラが正しいですか?
@Someprogrammerdude VC ++のstdlib内のすべてのコンテナー
—
フランソワアンドリュー
namespace std
が、単純なポインター型が機能する場所でも定義されたクラス型イテレーターを使用するだけです。これは、デバッグビルドチェックを挿入してオーバーランやその他の一般的なエラーを検出することだと思います。
sort(...
->std::sort(...
。私は推測する ADL(引数依存ルックアップが)あなたをトリップ何であること。それ、または控除ガイド。とにかく; 呼び出す関数は常に修飾してください。