C ++ वेक्टर को वेक्टर क्यों कहा जाता है?


147

वास्तव में बहुत ही आत्म-व्याख्यात्मक प्रश्न। मैं गणित में वैक्टर के बारे में अस्पष्ट रूप से जानता हूं, लेकिन मैं वास्तव में सी ++ वैक्टर का लिंक नहीं देखता हूं।


5
भौतिकी में वैक्टर (मैग्नेटेट + दिशा) पहली चीज है जो मेरे दिमाग को उस क्षण हिट करती है जब मैं वैक्टर शब्द सुनता हूं।
RBT

जवाबों:


109

वेक्टर की गणितीय परिभाषा सेट का एक सदस्य है Sn, जो एक विशिष्ट सेट ( S) में मूल्यों का एक क्रमबद्ध क्रम है । यह वह है जो C ++ vectorस्टोर करता है।


21
वेक्टर्स को आमतौर पर भौतिकी में उपयोग के कारण 2-3 आयामी माना जाता है। लेकिन गणित में अधिक आम तौर पर, उनका मतलब केवल संख्याओं का एक सेट होता है जिसमें एक आदेश होता है (गणितीय सेट क्रमहीन होते हैं, वे सामान से भरे बैग की तरह होते हैं)। एक वेक्टर में किसी भी संख्या में तत्व हो सकते हैं।
जोसेफ गार्विन

8
Vartec, यूक्लिडियन वेक्टर को एक समन्वय वेक्टर और इसके विपरीत के रूप में नहीं दर्शाया जा सकता है? वे यूक्लिडियन अंतरिक्ष बनाम अधिक सामान्य वेक्टर अंतरिक्ष में एक ही चीज़ (एक गुच्छे) के अलग-अलग प्रतिनिधित्व कर रहे हैं।
केल्विन

6
@ जोसेफ गार्विन: वैक्टर्स के पास ऐसे कंपोनेंट्स होने की भी जरूरत नहीं है जो नंबर हैं। उदाहरण के लिए, फ़ंक्शंस के कुछ सेट का उपयोग वेक्टर रिक्त स्थान बनाने के लिए किया जा सकता है जहां घटक कार्य करते हैं।
जासोन

13
एक वेक्टर वस्तुतः एक "वाहक" है। एक ही शब्द का प्रयोग (जैसे) कीड़े जो बीमारी प्रसारित करते हैं, और उसी लैटिन मूल से "वाहन" के रूप में आते हैं। तो यह कुछ ऐसा है जो आपको एक जगह से दूसरी जगह ले जाता है। संयोग से, "मैट्रिक्स" शब्द लैटिन से भी है, जिसका अर्थ "गर्भ" है।
आर्टेलियस

6
ये असंतोषजनक लगती है क्योंकि: 1. गणितीय वैक्टर आयाम में परिवर्तन नहीं करते, 2. गणितीय वैक्टर संचालन करता है std::vectorप्रदान नहीं करता है, 3. तर्क यह है कि std::vectorमूल्यों के एक आदेश दिया अनुक्रम है लागू हो सकते हैं करने के लिए std::list, std::deque, std::basic_string, आदि
jamesdlin

188

इसे वेक्टर कहा जाता है क्योंकि मानक टेम्प्लेट लाइब्रेरी के डिजाइनर एलेक्स स्टेपानोव इसे निर्मित सरणियों से अलग करने के लिए एक नाम की तलाश में थे। वह अब स्वीकार करते हैं कि उन्होंने एक गलती की है, क्योंकि गणित पहले से ही संख्या की एक निश्चित-लंबाई अनुक्रम के लिए 'वेक्टर' शब्द का उपयोग करता है। सी ++ 11 इस गलती को एक वर्ग 'सरणी' के रूप में पेश करता है जो गणितीय वेक्टर के समान व्यवहार करता है।

एलेक्स का सबक: हर बार जब आप किसी चीज का नाम लेते हैं तो बहुत सावधान रहें।


1
लेकिन सरणी भी ढेर आवंटन का उपयोग नहीं करेगी जो इसे कम कुशलता से आगे बढ़ाती है। हमारे पास std :: valarray, btw भी है।
सेलिबिट्ज़

1
आप इसे आवंटित कर सकते हैं ढेर पर सस्ती चाल वांछित है।

2
यह जानकर अच्छा लगा कि उन्होंने उस पाठ को सीखा, भले ही बहुत देर हो चुकी हो। हालांकि ... टाइपडिफ या # डेफिन इसे भी ठीक कर सकता है।
LearnCocos2D

4
कंप्यूटर विज्ञान में केवल दो कठिन चीजें हैं: कैश अमान्यकरण और नामकरण की चीजें - फिल कार्लटन
आरबीटी

7
यदि आप "[एलेक्स स्टेपानोव] अब यह दावा करने जा रहे हैं कि उसने एक गलती की है" तो आपके जवाब में, क्या आप कृपया एक प्रशस्ति पत्र प्रदान करेंगे?
ट्रेवर बॉयड स्मिथ

56

C ++ प्रोग्रामिंग लैंग्वेज Bjarne Stroustrup का एक अंश :

"कोई तर्क दे सकता है कि वैलेरे को वेक्टर कहा जाना चाहिए था क्योंकि यह एक पारंपरिक गणितीय वेक्टर है और उस वेक्टर को सरणी कहा जाना चाहिए था । हालांकि, यह शब्दावली विकसित करने का तरीका नहीं है।"


51
Pfftt .. उस आदमी को क्या पता है। मैंने कभी भी इस "बज़्ने स्ट्रॉस्ट्रुप" व्यक्ति के बारे में नहीं सुना है।
केल्विन

5
मुझे आश्चर्य है कि पिछली टिप्पणी के कई
अपवित्र

16

नाम रैखिक बीजगणित से आता है, जहां वेक्टर केवल एक कॉलम या केवल एक पंक्ति के साथ मैट्रिक्स होता है।


10

बस यह कहने के लिए कि यह शायद क्यों नहीं कहा जाता है array: क्योंकि std::vectorएक गतिशील आकार है। एक सरणी वैचारिक रूप से लंबाई में तय की जाती है। अगले C ++ मानक के अनुसार एक std::arrayटेम्प्लेट है, जो आकार में तय किया गया है और एक सादे सरणी पर पसंद किया जाना चाहिए:

std::array<int, 4> f = { 1, 2, 3, 4 };

क्या वह नया C ++ मानक अभी तक जारी किया गया है?
जोहान्स जेन्सेन

1
यह एक उत्तर का ज्यादा हिस्सा नहीं है, क्योंकि एक वेक्टर का आकार भी निश्चित होता है। वैक्टर शुद्ध मूल्य हैं, वे एक सेट में तत्व हैं जो कुछ अतिरिक्त संरचना के साथ मिलकर एक सार वेक्टर स्थान बनाते हैं। एक वेक्टर के "आकार को बदलने" की धारणा पूरी बकवास है।
सारा

@kai मुझे लगता है कि यहाँ एक भ्रम है। मैंने केवल यह तर्क दिया है कि इसे सरणी क्यों नहीं कहा जाता है । मैंने यह समझाने की कोशिश नहीं की है कि इसे विशेष रूप से वेक्टर क्यों कहा जाता है । भाषा के मानकीकरण से पहले भी C ++ में एक सरणी का हमेशा एक निश्चित आकार होता है, इसलिए आकार बदलने वाले वर्ग का नामकरण अच्छा नहीं होगा। std::array
जोहान्स स्काउब -

अब आप सही तरीके से शिकायत कर सकते हैं कि यह एक जवाब का ज्यादा नहीं है, लेकिन एक वैध टिप्पणी है। Insofar I आपकी टिप्पणी के पहले आधे वाक्य (अल्पविराम तक) से सहमत है। हालाँकि, अब इस सवाल पर एक टिप्पणी में मेरे जवाब को स्थानांतरित करने के लिए बहुत देर हो चुकी है, क्योंकि आप और @ उपयोगकर्ता 12 की ये उपयोगी टिप्पणियां खो जाएंगी।
जोहान्स शहाब -

दुविधा को हल करने के लिए एक समझौते के रूप में, मैंने उत्तर समुदाय को विकी बना दिया है। यह मेरे खाते से प्राप्त सभी अपवोट पॉइंट्स और डाउनवोट लॉस को हटाता है। यदि कोई अभी भी मेरी सहज टिप्पणी-भेष के लिए मुझे धन्यवाद देना चाहता है, तो वे इस अभ्यावेदन टिप्पणी को रद्द कर सकते हैं।
जोहान्स शहाब -

10

@MarkRuzon से उत्कृष्ट प्रतिक्रिया के पूरक के लिए:

एलेक्स ने कहा कि जिसे अब std :: वेक्टर कहा जाता है, को एक नाम देने के लिए उसने योजना और कॉमन लिस्प नाम को समान डेटा संरचनाओं को दिया था।

बाद में वह मानते हैं कि वह गलत था क्योंकि C ++ वेक्टर का गणित में वैक्टर से कोई लेना-देना नहीं है।

वह यह भी कहता है कि उसने 50 लोगों के समुदाय को 5 मिलियन लोगों के समुदाय में त्रुटि पेश की, इसलिए त्रुटि हमेशा के लिए रहने की संभावना है।


5

यह सिर्फ नाम है। C ++ वेक्टर बहुत अच्छी तरह से (या शायद अधिक सटीक भी हो सकता है) को डायनामिक ऐरे या रिसाइबल एरे कहा जाता है लेकिन यह नाम केवल चुना गया था । यह वेक्टर मेटामेटिक्स से वेक्टर जैसा नहीं है क्योंकि गणित में वैक्टर किसी भी सेट V के सदस्य होते हैं जैसे कि इस सेट पर दो महत्वपूर्ण ऑपरेशन परिभाषित होते हैं : + (वैक्टर के अलावा) और x (वेक्टर का गुणन क्षेत्र पर एक स्केलर द्वारा एफ ) और ये ऑपरेशन 8 स्वयंसिद्धों को संतुष्ट करते हैं :


जोड़ की संगति

u + (v + w) = (u + v) + w

इसके अलावा कम्यूटेशन

u + v = v + u

इसके अलावा की पहचान तत्व

एक तत्व 0 , V मौजूद है , जिसे शून्य वेक्टर कहा जाता है , जैसे कि v + 0 = v सभी v । V के लिए

विलोम के विलोम तत्व

प्रत्येक v every V के लिए, एक तत्व ∈v called V मौजूद होता है , जिसे v का व्युत्क्रम व्युत्क्रम कहा जाता है , जैसे कि v + (+v) = 0

क्षेत्र गुणन के साथ अदिश गुणन की अनुकूलता

a (bv) = (ab) v

अदिश गुणन का पहचान तत्व

1 v = v, जहां 1 F में गुणक पहचान को दर्शाता है ।

वेक्टर जोड़ के संबंध में अदिश गुणन का वितरण  

a (u + v) = au + av

क्षेत्र जोड़ के संबंध में अदिश गुणन का वितरण

(a + b) v = av + bv


C ++ std::vectorउन सभी का समर्थन करता है (सीधे नहीं, लेकिन C ++ सुविधाओं के माध्यम से), इसलिए इसे किसी तरह एक वेक्टर कहा जा सकता है, लेकिन यह सिर्फ बोलचाल का है और उदाहरण के लिए "C ++ प्रोग्रामिंग लैंग्वेज"Vallaray में Bjarne Stroustrup ने बताया है कि वे सीधे कुछ का समर्थन करते हैं।


3
C ++ में किसी भी कंटेनर में उस तरह के अंकगणित को परिभाषित नहीं किया गया है ताकि C ++ में कोई वैक्टर न हो। विशेष रूप से std::vectorअंकगणितीय संचालन का समर्थन नहीं करता है, और इसलिए, इन सभी गुणों के लिए अपरिभाषित हैं std::vector। तो एक std::vectorवेक्टर के रूप में योग्य नहीं है। मैंने इसे कॉल किया होगा dynamic_arrayया resizable_arrayजो आपको बताता है कि यह क्या है।
user877329

4
या बस "सूची"। लेकिन noooooo ... यह "वेक्टर" होना था, क्योंकि हर कोई इसका उपयोग करता है, है ना?
LearnCocos2D

1
@ LearnCocos2D, ठीक है, एक सूची को आमतौर पर एक लिंक की गई सूची के रूप में समझा जाता है। वास्तव में, पहले से ही C ++ मानक पुस्तकालय में सूची नामक एक कंटेनर है - यह एक दोहरी लिंक की गई सूची है।
Andrej

3

एक वेक्टर केवल मूल्यों का एक क्रम है, सभी एक ही प्रकार के। यह गणित में उपयोग के अनुरूप बहुत अधिक है। मुझे लगता है कि गणितीय विचार है कि वैक्टर को कुछ सामान्य संचालन का समर्थन करना चाहिए (जैसे जोड़ना, और स्केलर द्वारा स्केलिंग) नहीं किया जाता है, महत्वपूर्ण पहलू मुख्य रूप से संरचना है।


रैखिक बीजगणित में, जहां गणित में "वेक्टर" आता है, सब कुछ संचालन के बारे में है, जिसमें सभी वैक्टर समान आकार के होते हैं। रैखिक बीजगणित, इसलिए संचालन , वह है जो गणित में संख्याओं का एक गुच्छा बनाता है।
E4z9

3

इसके अलावा अगर आप इसे पूर्णांक या फ्लोटिंग पॉइंट स्टोर करते हैं तो यह एन डायमेंशनल वैक्टर को स्टोर करने के लिए एक उत्कृष्ट प्रकार बनाता है। सब के बाद एक वेक्टर है, एक विशिष्ट क्रम में रखी गई संख्याओं की एक सूची है।


यह स्पष्ट रूप से गलत है, जो कि एक वेक्टर नहीं है en.wikipedia.org/wiki/Vector_space
sara

@kai आप इन संघर्षों को अन्य क्षेत्रों में भी पाएंगे। कुछ प्रोग्रामिंग भाषाओं में वास्तविक संख्याएं 0.1गणित में संग्रहीत करने में सक्षम नहीं होंगी , यह मूल्य वास्तविक संख्याओं के सेट का एक सदस्य है। जावा प्रोग्रामिंग लैंग्वेज ( docs.oracle.com/javase/7/docs/api/java/util/Vector.html ) में एक वेक्टर है "वेक्टर क्लास ऑब्जेक्ट्स के बढ़ने योग्य एरे को लागू करता है। एरे की तरह, इसमें एक एलीमेंट होता है, जिसमें यह शामिल होता है। एक पूर्णांक सूचकांक का उपयोग करके पहुँचा जा सकता है। हालाँकि, वेक्टर का आकार बढ़ने या हटने के लिए आवश्यकतानुसार छोटा या बड़ा हो सकता है।
जोहान्स शहाब -

एक वेक्टर क्या है , यह इस बात पर निर्भर करता है कि आप किसकी परिभाषा का उपयोग करते हैं। जैसा कि यह सवाल stackoverflow.com पर किया गया था , math.stackexchange.com के बजाय , मैं यहाँ एक कम गणित-पक्षपाती दृष्टिकोण के लिए तर्क दूंगा।
जोहान्स शहाब -

@kai मैं वेक्टर रिक्त स्थान के संबंध में वेक्टर की परिभाषा से काफी परिचित हूं। मैं कंप्यूटर विज्ञान की परिभाषाओं से भी परिचित हूं, जहां एक वेक्टर केवल मेमोरी में आसन्न संख्या की एक सूची है, अर्थात एक सरणी। ध्यान दें कि विकिपीडिया में वेक्टर के लिए वितरण पृष्ठ में कि वे 1D सरणी होने का एक अर्थ दिखाते हैं। यह ठीक वही अर्थ है जो वेक्टर प्रोसेसर के लिए उपयोग किया जाता है, जो कम से कम 70 के दशक से आसपास रहे हैं। इसलिए, जबकि मैंने जो परिभाषा दी है वह सख्त गणितीय परिभाषा नहीं है, यह एक कंप्यूटर विज्ञान की परिभाषा है, भले ही पुरानी हो।
जेम्स मटका

3

बहुत समय पहले, बी भाषा में में वेक्टर प्रकार होते हैं। फिर सी भाषा ने उन्हें "सरण" कहा। तब C वर्ग के साथ और C ++ भाषा ने इसे व्युत्पन्न किया ...

यह निश्चित रूप से पूरी कहानी नहीं है। जैसा कि ऊपर उल्लेख किया गया है, Stepanov ने वास्तविक निर्णय लिया। लेकिन अगर "वेक्टर" अभी भी सी में उपयोग किया गया था, तो परिणाम शायद काफी अलग दिखता है।

पुनश्च। मुझे आश्चर्य है कि सी का नाम "सरणी" क्यों है। सही कारण क्या था?

पीएस 2। C ++ के रूप में एक भाषा के लिए IMO, एक सरणी बेहतर अर्थ है "ऑपरेटर के माध्यम से यथोचित रूप से एक्सेस होने के लिए एक प्रकार का होल्ड एलीमेंट्स" (यानी 42 [some_array_object]) नहीं है, उदाहरण के लिए std का मानचित्रण :: "साहचर्य सरणी" के रूप में।


2

मुझे लगता है कि यह शब्द पंक्ति वेक्टर से आता है । इसके अलावा, कंप्यूटर वैज्ञानिक चीजों के लिए नए नामों को सोचना पसंद करते हैं ...


2

लेकिन गणितीय वैक्टर गतिशील नहीं हैं, मैंने कभी भी 2 डी से 3 डी या किसी और चीज में बदलाव नहीं देखा है, अगर कुछ पारंपरिक सरणियां बेहतर वैक्टर के लिए बनाती हैं।


यकीन है कि गणितीय वैक्टर कई आयामों में माना जाता है। यदि गतिशील होने से आपका मतलब है कि वेक्टर का आकार बदल गया है, तो यह आसानी से गणितीय "आयामों में इस वेक्टर पर विचार करें" को निर्देशांक जोड़कर या काटकर अलग कर सकता है। एक साधारण रेखीय परिवर्तन एन-डिम स्पेस से वैक्टर को एम-डिम स्पेस में वैक्टर मैप कर सकता है। गणितीय वैक्टर बहुत गतिशील हैं।
000

1

वास्तविक कारण के बारे में कोई विचार नहीं है, लेकिन सी ++ इसे एक सरणी के बजाय एक वेक्टर कह रहा है, सी और सी ++ संरचनाओं के बीच भ्रम को कम करता है, हालांकि वे एक ही भूमिका को पूरा करते हैं।


1

C ++ वेक्टर को डायनेमिक ऐरे के रूप में सोचें, कौन से साइज़ को एलिमेंट्स डालकर या हटाकर बदला जा सकता है। वे वेक्टर की गणितीय परिभाषा से संबंधित नहीं हैं।

गणित में क्षेत्र

एक nxmमैट्रिक्स पर विचार करें A, जहां nपंक्तियों की संख्या से mमेल खाती है , और स्तंभों की संख्या से मेल खाती है। एक गणितीय संदर्भ में, एक बार जब आप इस तरह से एक मैट्रिक्स पेश करते हैं, तो बाद में, आप किसी भी ऑपरेशन को A's' श्रेणी से बाहर नहीं कर सकते हैं और आप इसका Aआकार भी नहीं बढ़ा सकते हैं। इसका मतलब यह है कि आप [n + 1]और / या के सूचकांक का उल्लेख नहीं कर सकते [m + 1]

अब, एक वेक्टर Aइन विशेषताओं को भी व्युत्पन्न करता है, जबकि उनके आयाम हमेशा 1xm(किसी भी [i]पंक्ति के भीतर चुने गए A) या nx1(किसी भी [j]स्तंभ के भीतर चयनित A) होंगे। एक वेक्टर को भी निर्दिष्ट नहीं किया जा सकता है 2xn, क्योंकि वैक्टर के एक संग्रह को एक वेक्टर के रूप में व्याख्या नहीं किया जा सकता है , जबकि एक वेक्टर - जो आयाम के साथ [i]कॉलम वेक्टर हो - को एक मैट्रिक्स के रूप में व्याख्या किया जा सकता है।A1xm

महत्वपूर्ण बात यह है कि आप गणित के संदर्भ में एक बार वेक्टर के आयाम को नहीं बदल सकते।

C ++ में वैक्टर

C ++ में, वैक्टर गणित में वैक्टर की तरह होते हैं, लेकिन गणित के विपरीत उनके आकार में परिवर्तन किया जा सकता है । एक शब्द के रूप में आकार यहां लागू होता है क्योंकि इसका तात्पर्य है तत्व गणना जिसमें एक विशेष वेक्टर शामिल है।

आप C ++ वैक्टर के संदर्भ में शब्द आयाम का उपयोग करते हैं, जब आपके पास वैक्टर का एक वेक्टर होता है std::vector<std::vector<T>>> ragged_array:। इस उदाहरण में, मैंने उस वेक्टर को "रैग्ड" कहा, क्योंकि यह दर्शाता है कि उस वेक्टर के प्रत्येक वेक्टर के आकार को स्वतंत्र रूप से कैसे बदला जा सकता है। यह न केवल नियमों का उल्लंघन करता है कि गणित में किसी विशेष वेक्टर को पेश करने के बाद आयामों को कैसे बदला नहीं जा सकता है, बल्कि यह भी दर्शाता है कि मैट्रिक्स के रूप में इसका उपयोग कैसे नहीं किया जा सकता है।


0

आश्चर्य है कि प्रकार पर आधिपत्य नाम करने के लिए करता है ..

यहाँ एक कॉलम ब्लास्ट हो जाता है .. (कुछ सर्वर-साइड ASP.NET HTML एन्कोडिंग कौशल के लिए स्रोत देखें)

या यह एक पंक्ति थी?

फिर फिर, यह MIMD या SSE वेक्टर मशीन संदर्भ में सोच रहा है, नाम अभी भी बहुत अच्छा लग रहा है।


-2

यह मैट्रिक्स की संरचना से आता है जो वैक्टर से बनता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.