Pertanyaannya cukup jelas. Saya tahu sedikit tentang vektor dalam matematika, tetapi saya tidak benar-benar melihat tautan ke vektor C ++.
Pertanyaannya cukup jelas. Saya tahu sedikit tentang vektor dalam matematika, tetapi saya tidak benar-benar melihat tautan ke vektor C ++.
Jawaban:
Definisi matematika dari vektor adalah anggota himpunan S
n
, yang merupakan urutan nilai yang diurutkan dalam set tertentu ( S
). Inilah yang toko C ++ vector
.
std::vector
tidak menyediakan, 3. Argumen yang std::vector
merupakan memerintahkan urutan nilai-nilai bisa berlaku untuk std::list
, std::deque
, std::basic_string
, dll
Ini disebut vektor karena Alex Stepanov, perancang Perpustakaan Templat Standar, sedang mencari nama untuk membedakannya dari array bawaan. Dia mengakui sekarang bahwa dia membuat kesalahan, karena matematika sudah menggunakan istilah 'vektor' untuk urutan angka dengan panjang tetap. C ++ 11 menambah kesalahan ini dengan memperkenalkan kelas 'array' yang berperilaku mirip dengan vektor matematika.
Pelajaran Alex: berhati-hatilah setiap kali Anda menyebutkan sesuatu.
Kutipan dari Bahasa Pemrograman C ++ oleh Bjarne Stroustrup:
"Orang bisa berpendapat bahwa valarray seharusnya disebut vektor karena itu adalah vektor matematika tradisional dan vektor itu seharusnya disebut array . Namun, ini bukan cara terminologi berkembang."
Hanya untuk mengatakan mengapa itu mungkin tidak disebut array
: Karena std::vector
memiliki ukuran yang dinamis. Array secara konseptual memiliki panjang yang tetap. Selanjutnya C ++ Standard memiliki std::array
template, yang ukurannya tetap dan harus lebih disukai daripada array biasa:
std::array<int, 4> f = { 1, 2, 3, 4 };
std::array
tidak akan baik.
Untuk melengkapi tanggapan istimewa dari @MarkRuzon:
Alex mengatakan bahwa untuk memberi nama pada apa yang sekarang disebut std :: vector, ia mengamati nama yang diberikan Skema dan Common Lisp kepada struktur data yang serupa.
Kemudian dia mengakui bahwa dia salah karena vektor C ++ tidak ada hubungannya dengan vektor dalam matematika.
Dia juga mengatakan bahwa dia memperkenalkan kesalahan komunitas 50 orang ke komunitas 5 juta orang, jadi kesalahan itu kemungkinan akan tetap selamanya.
Itu hanya namanya saja. Vektor C ++ bisa sangat baik (atau mungkin bahkan lebih akurat) disebut array dinamis atau array resizable tetapi nama ini hanya dipilih . Ini vektor adalah tidak sama dengan vektor dari methematics karena dalam matematika vektor adalah anggota setiap himpunan V sehingga ada dua penting operasi didefinisikan pada himpunan ini: + (penambahan vektor) dan x (perkalian vektor dengan skalar dari lapangan F ) dan operasi ini memenuhi 8 aksioma :
Asosiatif penambahan
u + (v + w) = (u + v) + w
Commutativity penambahan
u + v = v + u
Elemen identitas penambahan
Ada ada unsur 0 ∈ V , yang disebut vektor nol , sehingga v + 0 = v untuk semua v ∈ V .
Elemen tambahan dari inverse
Untuk setiap v ∈ V, terdapat elemen −v ∈ V , disebut aditif invers dari v, sehingga v + (−v) = 0
Kompatibilitas multiplikasi skalar dengan multiplikasi bidang
a (bv) = (ab) v
Elemen identitas multiplikasi skalar
1 v = v, di mana 1 menunjukkan identitas perkalian di F .
Distribusi dari multiplikasi skalar sehubungan dengan penambahan vektor
a (u + v) = au + av
Distribusi dari multiplikasi skalar sehubungan dengan penambahan lapangan
(a + b) v = av + bv
C ++ std::vector
mendukung semuanya (tidak secara langsung, tetapi melalui fitur C ++), sehingga entah bagaimana bisa disebut vektor, tetapi itu hanya bahasa sehari-hari dan misalnya Vallaray
ditunjukkan oleh Bjarne Stroustrup di "C ++ Programming Language" yang mendukung sebagian dari mereka secara langsung.
std::vector
tidak mendukung operasi aritmatika, dan oleh karena itu, semua properti ini tidak terdefinisi untuk a std::vector
. Jadi a std::vector
tidak memenuhi syarat sebagai vektor. Saya akan menyebutnya dynamic_array
atau resizable_array
yang memberi tahu Anda apa itu.
Vektor hanyalah urutan nilai, semua dari jenis yang sama. Ini cukup banyak sejalan dengan penggunaan dalam matematika. Saya kira ide matematika bahwa vektor harus mendukung beberapa operasi umum (seperti menambahkan, dan penskalaan dengan skalar) tidak terbawa, aspek penting terutama struktur.
Juga jika Anda membuatnya menyimpan bilangan bulat atau titik apung itu membuat jenis yang sangat baik untuk menyimpan vektor dimensi N. Setelah semua vektor, adalah daftar angka yang disimpan dalam urutan tertentu.
0.1
, jika dalam matematika, nilai ini adalah anggota dari himpunan bilangan real. Dalam bahasa pemrograman Java ( docs.oracle.com/javase/7/docs/api/java/util/Vector.html ) vektor adalah "Kelas vektor mengimplementasikan array objek yang dapat ditumbuhkan. Seperti sebuah array, ia berisi komponen yang dapat diakses menggunakan indeks integer. Namun, ukuran Vektor dapat tumbuh atau menyusut sesuai kebutuhan untuk mengakomodasi penambahan dan penghapusan item setelah Vector dibuat. "
Dulu, dalam bahasa B ada jenis vektor. Kemudian bahasa C memanggil mereka "array". Kemudian bahasa C dengan Kelas dan bahasa C ++ baru saja membuatnya ...
Ini tentu saja bukan keseluruhan cerita. Seperti disebutkan di atas, Stepanov membuat keputusan yang sebenarnya. Tetapi jika "vektor" masih digunakan dalam C, hasilnya mungkin terlihat sangat berbeda.
PS. Saya bertanya-tanya mengapa C mengganti nama "array". Apa alasan tepatnya?
PS2. IMO untuk bahasa sebagai C ++, array lebih baik yang berarti "elemen tipe penahanan untuk diakses secara wajar melalui operator []" (mis. Bukan 42 [some_array_object]), misalnya instantiasi std :: map sebagai "array asosiatif".
Saya kira itu berasal dari vektor baris istilah . Juga, para ilmuwan komputer suka memikirkan nama-nama baru untuk hal-hal ...
tetapi vektor matematika tidak dinamis, saya belum pernah melihat satu perubahan dari 2D ke 3D atau apa pun, jika sesuatu array tradisional membuat vektor lebih baik.
Tidak tahu tentang alasan sebenarnya, tetapi C ++ menyebutnya vektor bukan array, mengurangi kebingungan antara struktur C dan C ++, meskipun mereka memenuhi peran yang sama.
Pikirkan vektor C ++ sebagai array dinamis, yang ukurannya dapat diubah dengan memasukkan atau menghapus elemen. Mereka tidak terkait dengan definisi matematika vektor.
Vektor dalam Matematika
Pertimbangkan nxm
matriks yang disebut A
, di mana n
sesuai dengan jumlah baris, dan m
sesuai dengan jumlah kolom. Dalam konteks matematika, setelah Anda memperkenalkan matriks seperti ini, maka nanti, Anda tidak dapat melakukan operasi apa pun di luar A
jangkauan dan Anda juga tidak dapat memperluas A
ukuran. Artinya, Anda tidak dapat merujuk ke indeks [n + 1]
dan / atau [m + 1]
.
Sekarang, vektor yang A
menurunkan atribut-atribut ini juga, sementara dimensinya akan selalu 1xm
(setiap [i]
baris yang dipilih di dalam A
) atau nx1
(setiap [j]
kolom yang dipilih dalam A
). Vektor juga tidak dapat ditentukan sebagai 2xn
, karena kumpulan vektor tidak dapat diartikan sebagai satu vektor, sedangkan satu vektor - biarkan itu menjadi [i]
vektor kolom A
dengan dimensi 1xm
- dapat diartikan sebagai matriks.
Yang penting adalah Anda tidak bisa mengubah dimensi vektor begitu itu diperkenalkan dalam hal matematika.
Vektor dalam C ++
Dalam C ++, vektor sama seperti vektor dalam matematika, tetapi tidak seperti dalam matematika ukurannya dapat diubah . Ukuran sebagai istilah berlaku di sini karena menyiratkan jumlah elemen yang mengandung satu vektor tertentu.
Anda menggunakan dimensi jangka segi C ++ vektor, ketika Anda memiliki vektor vektor: std::vector<std::vector<T>>> ragged_array
. Dalam contoh ini, saya menyebut vektor itu "kasar", karena ini menunjukkan bagaimana ukuran setiap vektor dari vektor itu dapat diubah secara independen. Ini tidak hanya melanggar aturan tentang bagaimana dimensi tidak dapat diubah begitu vektor tertentu diperkenalkan dalam matematika, tetapi juga menunjukkan, bagaimana dimensi itu tidak dapat digunakan sebagai matriks.
Ingin tahu bahwa parametrisation pada jenis tidak untuk nama ..
di sini kolom diledakkan .. (lihat sumber untuk beberapa keterampilan penyandian ASP.NET HTML sisi-server)
atau apakah itu berturut-turut?
Kemudian lagi, memikirkannya dalam konteks mesin MIMD atau bahkan SSE vektor, namanya masih terdengar sangat bagus.