質問は本当に一目瞭然です。数学のベクトルについては漠然と知っていますが、C++ベクトルへのリンクは実際にはありません。
ベクトルの数学的な定義は、セットS
のメンバーですn
、特定のセット(S
)内の値の順序付きシーケンスです。これは、C++ vector
が保存するものです。
標準テンプレートライブラリの設計者であるアレックスステパノフは、組み込み配列と区別するために名前を探していたため、ベクトルと呼ばれます。彼は、数学がすでに数字の固定長シーケンスに「ベクトル」という用語をすでに使用しているため、間違いを犯したことを認めています。これで、C++ 0Xは、数学ベクトルと同様に動作するクラス「配列」を導入することにより、この間違いを悪化させます。
アレックスのレッスン:何か名前を付けるたびに非常に注意してください。
Bjarne StroustrupによるThe C++ Programming Languageからの抜粋:
「valarrayは従来の数学的ベクトルであるためvectorと呼ばれるべきであり、vectorはarray。ただし、これは用語の進化方法ではありません。」
名前は線形代数に由来します。ベクトルは1列または1行のみの行列です。
おそらくarray
と呼ばれない理由を言うために:std::vector
には動的なサイズがあります。配列は概念的に長さが固定されています。ちなみに、次のC++標準にはstd::array
テンプレートは、サイズが固定されており、プレーン配列よりも優先される必要があります。
std::array<int, 4> f = { 1, 2, 3, 4 };
@MarkRuzonからの優れた応答を補完するには:
アレックスは、現在std :: vectorと呼ばれているものに名前を付けるために、類似のデータ構造に Scheme および Common LISP が与えられているという名前を観察したと述べました。
後で彼は C++ vectorは数学のベクトルとは何の関係もないので、自分が間違っていたと認めています。
彼はまた、50人のコミュニティのエラーを500万人のコミュニティに導入したため、エラーは永遠に残る可能性が高いと述べています。
また、整数または浮動小数点を格納する場合、N次元ベクトルを格納するための優れた型になります。すべてのベクトルは、特定の順序で保持される数値のリストです。
ベクトルは、すべて同じタイプの値のシーケンスです。これは、数学での使用とほぼ一致しています。ベクトルはいくつかの一般的な操作(スカラーによる加算やスケーリングなど)をサポートする必要があるという数学的な考え方は引き継がれないと思います。重要な側面は主に構造です。
昔、 B言語 にはベクトル型があります。その後、C言語はそれらを「配列」と呼びました。次に、クラスとC++言語を使用したCがそれを派生させました...
これは確かにすべてではありません。上記のように、Stepanovは実際の決定を行いました。ただし、Cで「ベクトル」がまだ使用されている場合、結果はまったく異なるように見える場合があります。
PS。 Cが「配列」の名前を変更するのはなぜだろうか。正確な理由は何ですか?
PS2。 C++としての言語のIMOでは、配列は「operator []を介して合理的にアクセスされる要素を保持する型」を意味します(つまり、42 [some_array_object]ではありません)。 「連想配列」としてのstd :: mapのインスタンス化。
名前だけです。 C++vectorはdynamic arrayまたはresizable arrayと呼ばれる可能性が非常に高い(またはさらに正確かもしれませんが)この名前は単にchosenでした。このvectorは数学のベクトルと同じではありません。数学ではベクトルは任意のセットのメンバーであるためです[〜#〜] v [〜#〜]このセットで定義される2つの重要なoperations:+(ベクトルの追加)とx(フィールドからのスカラーによるベクトルの乗算- [〜#〜] f [〜#〜])およびこれらの操作8つの公理を満たす:
加算の結合性
u +(v + w)=(u + v)+ w
加算の可換性
u + v = v + u
加算の識別要素
要素0∈[〜#〜] v [〜#〜]が存在し、ゼロベクトルと呼ばれ、すべてのvに対してv + 0 = v ∈[〜#〜] v [〜#〜]。
加算の逆要素
V∈Vごとに、vのadditive inverseと呼ばれる要素-v∈[〜#〜] v [〜#〜]が存在します。そのv +(−v)=
フィールド乗算とスカラー乗算の互換性
a(bv)=(ab)v
スカラー倍算の識別要素
1 v = v、ここで1は[〜#〜] f [〜#〜のmultiplicative identityを表します]。
ベクトル加算に関するスカラー乗算の分布
a(u + v)= au + av
フィールドの加算に関するスカラー乗算の分布
(a + b)v = av + bv
C++ std::vector
はすべて(直接ではなく、C++機能を介して)サポートしているため、何らかの方法でベクターと呼ぶことができますが、口語的であり、たとえばBjarne Stroustrup inによって指摘されたVallaray
C++プログラミング言語」は、それらの一部を直接サポートします。
行ベクトル という用語から来ていると思います。また、コンピューター科学者は、物事の新しい名前を考えるのが大好きです...
本当の理由はわかりませんが、C++が配列ではなくベクトルと呼んでいるので、CとC++の構造間の混乱は減りますが、それらは同じ役割を果たします。
しかし、数学的なベクトルは動的ではありません。従来の配列がより良いベクトルを作成する場合、2Dから3Dへの変更やその他の変更は見たことがありません。
型のパラメータ化が名前にもたらす不思議..
ここで列が爆発します..(サーバー側のASP.NET HTMLエンコードスキルのソースを表示)
またはそれは行でしたか?
もう一度、MIMDまたはSSEベクトルマシンコンテキストで考えてみても、名前は今でもいい感じです。