প্রশ্নটি সত্যই স্ব-বর্ণনামূলক। আমি গণিতে ভেক্টর সম্পর্কে অস্পষ্টভাবে জানি, তবে আমি সত্যিই সি ++ ভেক্টরগুলির লিঙ্কটি দেখতে পাচ্ছি না।
প্রশ্নটি সত্যই স্ব-বর্ণনামূলক। আমি গণিতে ভেক্টর সম্পর্কে অস্পষ্টভাবে জানি, তবে আমি সত্যিই সি ++ ভেক্টরগুলির লিঙ্কটি দেখতে পাচ্ছি না।
উত্তর:
কোনও ভেক্টরের গাণিতিক সংজ্ঞাটি সেটটির সদস্য S
n
, যা একটি নির্দিষ্ট সেটে মানগুলির ক্রমযুক্ত ক্রম ( S
)) এটি একটি সি ++ vector
সঞ্চয় করে।
std::vector
উপলব্ধ করা হয় না, 3 যুক্তি হল যে std::vector
মূল্যবোধের একটি আদেশ ক্রম প্রয়োগ হতে পারে জন্য std::list
, std::deque
, std::basic_string
, ইত্যাদি
একে ভেক্টর বলা হয় কারণ স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরির ডিজাইনার অ্যালেক্স স্টেপানোভ বিল্ট-ইন অ্যারে থেকে আলাদা করার জন্য কোনও নাম খুঁজছিলেন। তিনি এখন স্বীকার করেছেন যে তিনি একটি ভুল করেছেন, কারণ গণিত ইতিমধ্যে সংখ্যার একটি নির্দিষ্ট দৈর্ঘ্যের ক্রমের জন্য 'ভেক্টর' শব্দটি ব্যবহার করেছে। গাণিতিক ভেক্টরের অনুরূপ আচরণ করে এমন একটি শ্রেণি 'অ্যারে' প্রবর্তন করে সি ++ 11 এই ভুলটিকে মিশ্রণ করে।
অ্যালেক্সের পাঠ: আপনি যখনই কোনও কিছুর নাম রাখবেন তখন খুব সাবধান হন।
থেকে একটি উদ্ধৃতাংশ সি ++ ল্যাঙ্গুয়েজ প্রোগ্রামিং বিয়ারনে স্ট্রোভস্ট্রুপের দ্বারা:
"যে কেউ তর্ক করতে পারে যে ভ্যালারিকে ভেক্টর বলা উচিত ছিল কারণ এটি একটি traditional তিহ্যগত গাণিতিক ভেক্টর এবং সেই ভেক্টরকে অ্যারে বলা উচিত ছিল । তবে, এটি পরিভাষাটি যেভাবে বিকশিত হয়েছিল সেভাবে নয়।"
কেন সম্ভবত এটি বলা হয় না তা বলা array
: কারণ std::vector
একটি গতিশীল আকার রয়েছে has একটি অ্যারে ধারণাগতভাবে দৈর্ঘ্য স্থির করা হয়। পরবর্তী সি ++ স্ট্যান্ডার্ডের উপায়ে একটি std::array
টেমপ্লেট রয়েছে, যা আকারে স্থির হয় এবং এটি একটি সরল অ্যারের চেয়ে পছন্দ করা উচিত:
std::array<int, 4> f = { 1, 2, 3, 4 };
std::array
@ মার্করুজন থেকে দুর্দান্ত প্রতিক্রিয়া পরিপূরক করতে:
অ্যালেক্স বলেছিলেন যে এখন নামকরণের জন্য স্ট্যান্ড :: ভেক্টর তিনি স্কিম এবং কমন লিসপ একইরকম ডেটা স্ট্রাকচারকে যে নামটি দিয়েছিলেন তা লক্ষ্য করেছিলেন ।
পরে তিনি স্বীকার করেছেন তিনি ভুল ছিলেন কারণ সি ++ ভেক্টরের গণিতে ভেক্টরগুলির সাথে কোনও সম্পর্ক নেই।
তিনি আরও বলেছিলেন যে তিনি 50 মিলিয়ন লোকের একটি সম্প্রদায়ের একটি ত্রুটি 5 মিলিয়ন লোকের একটি সম্প্রদায়ের কাছে প্রবর্তন করেছিলেন, সুতরাং ত্রুটিটি চিরকাল স্থায়ী হওয়ার সম্ভাবনা রয়েছে।
এটি শুধু নাম। সি ++ ভেক্টরকে খুব ভাল (বা আরও বেশি নির্ভুল) ডায়নামিক অ্যারে বা পুনরায় আকার পরিবর্তনযোগ্য অ্যারে বলা যেতে পারে তবে এই নামটি কেবলই বেছে নেওয়া হয়েছিল । এই ভেক্টর গণিত ভেক্টর কোনো সেট সদস্য কারণ methematics থেকে ভেক্টর হিসাবে একই নয় ভী দুটি গুরুত্বপূর্ণ আছে যেমন যে অপারেশন : এই সেটে সংজ্ঞায়িত + + (ভেক্টর যোগে) এবং এক্স (ক ভেক্টরের গুণ মাঠ থেকে স্কেলের দ্বারা চ ) এবং এই ক্রিয়াকলাপগুলি 8 টি অ্যাকোরিয়ামকে সন্তুষ্ট করে :
সংযোজন এর সমিতি
u + (v + w) = (ইউ + ভি) + ডাব্লু
সংযোজনের চলাচল
u + v = v + u
সংযোজনের পরিচয় উপাদান
এখানে 0 ∈ V উপাদান রয়েছে , যাকে শূন্য ভেক্টর বলা হয় , যেমন সমস্ত v ∈ V এর জন্য v + 0 = v ।
সংযোজনের বিপরীত উপাদান
প্রতি v ∈ V এর জন্য একটি উপাদান −v ∈ ভি বিদ্যমান থাকে , যাকে v এর অ্যাডিটিভ ইনভার্স বলা হয় , যেমন v + ()v) = 0
ক্ষেত্রের গুণনের সাথে স্কেলার গুণনের সামঞ্জস্য
a (bv) = (ab) v
স্কেলার গুণনের সনাক্তকরণ উপাদান
1 V = V, যেখানে 1 -এর মানে গুণনশীল পরিচয় মধ্যে এফ ।
ভেক্টর সংযোজনের ক্ষেত্রে স্কেলার গুণকের বিতরণ
a (u + v) = au + av
ক্ষেত্র সংযোজনের ক্ষেত্রে স্কেলার গুণনের বিতরণ
(a + b) v = av + bv
সি ++ std::vector
তাদের সকলকে সমর্থন করে (সরাসরি নয়, তবে সি ++ বৈশিষ্ট্যগুলির মাধ্যমে), সুতরাং এটি কোনওভাবে ভেক্টর বলা যেতে পারে, তবে এটি কেবল চালচলন এবং উদাহরণস্বরূপ "সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ"Vallaray
-তে বার্জার স্ট্রস্ট্রুপ দ্বারা চিহ্নিত কিছুকে সরাসরি সমর্থন করে।
std::vector
পাটিগণিতের ক্রিয়াকলাপ সমর্থন করে না, এবং তাই এই সমস্ত বৈশিষ্ট্য a এর জন্য অপরিজ্ঞাত std::vector
। সুতরাং a std::vector
ভেক্টর হিসাবে যোগ্যতা অর্জন করে না। আমি এটিকে ডাকতাম dynamic_array
বা resizable_array
যা তা আপনাকে জানায়।
একটি ভেক্টর হ'ল মানগুলির একটি ক্রম, একই ধরণের সমস্ত। এটি গণিতে ব্যবহারের সাথে সামঞ্জস্যপূর্ণ। আমি গাণিতিক ধারণা অনুমান করি যে ভেক্টরদের কিছু সাধারণ ক্রিয়াকলাপ সমর্থন করা উচিত (যেমন একটি স্কেলারের সাহায্যে যোগ করা এবং স্কেলিং) চালিত হয় না, গুরুত্বপূর্ণ দিকটি মূলত কাঠামো।
এছাড়াও যদি আপনি এটি পূর্ণসংখ্যা বা ভাসমান পয়েন্টগুলি সঞ্চয় করেন তবে এটি এন ডাইমেনশনাল ভেক্টরগুলি সঞ্চয় করার জন্য একটি দুর্দান্ত ধরণের তৈরি করে। সমস্ত ভেক্টর হওয়ার পরে, একটি নির্দিষ্ট ক্রমে রাখা সংখ্যার একটি তালিকা।
0.1
গণিতের জন্য ভেরাস সংরক্ষণ করতে সক্ষম হবে না , এই মানটি আসল সংখ্যার সেটের একটি সদস্য। জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে ( docs.oracle.com/javase/7/docs/api/java/util/Vector.html ) ভেক্টরটি "ভেক্টর শ্রেণি অবজেক্টের বর্ধনযোগ্য অ্যারে প্রয়োগ করে an একটি অ্যারের মতো এটিতে উপাদান রয়েছে যা একটি পূর্ণসংখ্যার সূচক ব্যবহার করে অ্যাক্সেস করা যেতে পারে However তবে, ভেক্টর তৈরি হওয়ার পরে আইটেম যুক্ত এবং অপসারণের জন্য প্রয়োজন হিসাবে কোনও ভেক্টরের আকার বৃদ্ধি বা সঙ্কুচিত হতে পারে ""
অনেক দিন আগে, বি ভাষায় ভেক্টর প্রকার রয়েছে। তারপরে সি ভাষা তাদের "অ্যারে" বলে। তারপরে C সহ ক্লাস এবং সি ++ ভাষার সবেমাত্র এটি প্রাপ্ত হয়েছে ...
এটি অবশ্যই পুরো গল্প নয়। উপরে উল্লিখিত হিসাবে, স্ট্যাপানভ প্রকৃত সিদ্ধান্ত নিয়েছিলেন। তবে যদি "ভেক্টর" এখনও সিতে ব্যবহৃত হয় তবে ফলাফলটি সম্ভবত অন্যরকম দেখাচ্ছে।
পুনশ্চ. আমি ভাবছি সি কেন "অ্যারে" নামকরণ করে? সঠিক কারণ কী ছিল?
PS2। সি ++ হিসাবে ভাষার জন্য আইএমও, একটি অ্যারের অর্থ আরও ভাল হয় "অপারেটরের মাধ্যমে যুক্তিসঙ্গতভাবে অ্যাক্সেস করার জন্য টাইপ হোল্ড উপাদানগুলি []" (যেমন 42 নয় [কিছু_আররে_বজেক্ট] নয়), যেমন "এসোসিয়েটিভ অ্যারে" হিসাবে স্ট্যান্ড :: ম্যাপের ইনস্ট্যান্টেশন।
আমি অনুমান করব এটি শব্দ সারি ভেক্টর থেকে এসেছে । এছাড়াও, কম্পিউটার বিজ্ঞানীরা জিনিসগুলির জন্য নতুন নাম চিন্তা করতে ভালবাসেন ...
তবে গাণিতিক ভেক্টরগুলি গতিশীল নয়, আমি কখনও কখনও 2 ডি থেকে 3 ডি বা অন্য কিছুতে কোনও পরিবর্তন দেখিনি, যদি ট্র্যাডিশনাল অ্যারেগুলি আরও ভাল ভেক্টরগুলির জন্য কিছু করে তোলে।
আসল কারণ সম্পর্কে ধারণা নেই, তবে সি ++ এটিকে অ্যারের পরিবর্তে ভেক্টর বলছে, সি এবং সি ++ কাঠামোর মধ্যে বিভ্রান্তি হ্রাস করবে, যদিও তারা একই ভূমিকা পালন করে।
একটি সি ++ ভেক্টরকে একটি গতিশীল অ্যারে হিসাবে ভাবেন, উপাদানগুলি সন্নিবেশ করিয়ে বা সরিয়ে কোন আকারটিকে পরিবর্তন করা যেতে পারে। এগুলি ভেক্টরের গাণিতিক সংজ্ঞা সম্পর্কিত নয়।
গণিতে ভেক্টর
nxm
বলা একটি ম্যাট্রিক্স বিবেচনা করুন A
, যেখানে n
সারিগুলির সংখ্যার সাথে মিল রয়েছে এবং m
কলামের সংখ্যার সাথে মিল রয়েছে। গাণিতিক প্রসঙ্গে আপনি একবার এর মতো ম্যাট্রিক্স প্রবর্তন করেন, তারপরে, আপনি A
এর সীমার বাইরে কোনও ক্রিয়াকলাপ করতে পারবেন না এবং আপনি A
এর আকারও বাড়িয়ে দিতে পারবেন না । এর অর্থ কী [n + 1]
এবং আপনি / এবং এর সূচকটি উল্লেখ করতে পারবেন না [m + 1]
।
এখন, কোনও ভেক্টর A
এই বৈশিষ্ট্যগুলিও উত্পন্ন করে, যখন তাদের মাত্রা সর্বদা 1xm
(এর [i]
মধ্যে নির্বাচিত কোনও সারি A
) বা nx1
(যে কোনও [j]
কলামের মধ্যে নির্বাচিত A
) থাকবে। কোনও ভেক্টরও এ হিসাবে নির্দিষ্ট করা যায় না 2xn
, কারণ ভেক্টরগুলির সংকলনকে একটি ভেক্টর হিসাবে ব্যাখ্যা করা যায় না , অন্যদিকে একজন ভেক্টর - যাকে ম্যাট্রিক্স হিসাবে ব্যাখ্যা করা যেতে পারে - এর মাত্রাগুলির সাথে [i]
কলাম ভেক্টর হতে পারে।A
1xm
গুরুত্বপূর্ণ গ্রহণযোগ্যতাটি হ'ল গণিতের শর্তে একবার চালু হওয়ার পরে আপনি কোনও ভেক্টরের মাত্রা পরিবর্তন করতে পারবেন না।
সি ++ তে ভেক্টর
সি ++ তে, ভেক্টরগুলি গণিতে ঠিক যেমন ভেক্টর, তবে গণিতে ভিন্ন তাদের আকার পরিবর্তন করা যায় । শব্দ হিসাবে আকারটি এখানে প্রযোজ্য কারণ এটি নির্দিষ্ট ভেক্টরটিতে থাকা উপাদান উপাদানকে বোঝায়।
আপনি ভেক্টর একটি ভেক্টর আছে, সি ++ ভেক্টর পরিপ্রেক্ষিতে মেয়াদ মাত্রা ব্যবহার করুন: std::vector<std::vector<T>>> ragged_array
। এই উদাহরণে, আমি সেই ভেক্টরকে "র্যাগড" বলেছিলাম, কারণ এটি দেখায় যে সেই ভেক্টরের প্রতিটি ভেক্টরের আকার কীভাবে স্বাধীনভাবে পরিবর্তন করা যায়। এটি শুধুমাত্র গণিতে কোনও নির্দিষ্ট ভেক্টর প্রবর্তন করার পরে মাত্রাগুলি কীভাবে পরিবর্তন করা যায় না তা নিয়ম লঙ্ঘন করে না, তবে এটি প্রমাণ করে যে কীভাবে এটি ম্যাট্রিক্স হিসাবে ব্যবহার করা যায় না।
আশ্চর্য যে প্রকারভেদে প্যারামিট্রিেশন নামগুলি করে ..
এখানে একটি কলাম ব্লাস্ট হয়ে যায় .. (কিছু সার্ভার-সাইড এএসপি। নেট এইচটিএমএল এনকোডিং দক্ষতার জন্য উত্স দেখুন)
নাকি এক সারি ছিল?
তারপরে আবার এমআইএমডি বা এসএসই ভেক্টর মেশিনের প্রসঙ্গে এটির কথা চিন্তা করে, নামটি এখনও খারাপ বলে মনে হচ্ছে।