অ্যারেটিকে ভেক্টরে রূপান্তর করার সহজ উপায় কী?
void test(vector<int> _array)
{
...
}
int x[3]={1, 2, 3};
test(x); // Syntax error.
আমি এক্সকে সহজ উপায়ে ইনট অ্যারে থেকে ভেক্টরে রূপান্তর করতে চাই।
অ্যারেটিকে ভেক্টরে রূপান্তর করার সহজ উপায় কী?
void test(vector<int> _array)
{
...
}
int x[3]={1, 2, 3};
test(x); // Syntax error.
আমি এক্সকে সহজ উপায়ে ইনট অ্যারে থেকে ভেক্টরে রূপান্তর করতে চাই।
উত্তর:
vector
দুটি পুনরুক্তিকারী কনস্ট্রাক্টরটি ব্যবহার করুন , পয়েন্টারগুলি বৈধ পুনরাবৃত্তকারী রয়েছে তা নোট করুন এবং অ্যারে থেকে পয়েন্টারে রূপান্তরিত রূপান্তরটি ব্যবহার করুন:
int x[3] = {1, 2, 3};
std::vector<int> v(x, x + sizeof x / sizeof x[0]);
test(v);
বা
test(std::vector<int>(x, x + sizeof x / sizeof x[0]));
sizeof x / sizeof x[0]
স্পষ্টতই 3
এই প্রসঙ্গে কোথায় ; এটি অ্যারেতে উপাদানের সংখ্যা পাওয়ার সাধারণ উপায়। লক্ষ্য করুন x + sizeof x / sizeof x[0]
এক উপাদান পয়েন্ট অতিক্রম শেষ উপাদান।
sizeof x / sizeof x[0] == std::extent<decltype(x)>::value
ব্যক্তিগতভাবে, আমি বেশিরভাগ সি +++ পদ্ধতির পছন্দ করি কারণ এটির জন্য আপনাকে sizeof()
আর অ্যারে বাউন্ডস সামঞ্জস্য করার প্রয়োজন হয় না এবং আপনি চাইলে সি ++ 2003-এ প্রাসঙ্গিক ফাংশনটিও সংজ্ঞায়িত করতে পারেন too ):
#include <iterator>
#include <vector>
int x[] = { 1, 2, 3, 4, 5 };
std::vector<int> v(std::begin(x), std::end(x));
স্পষ্টতই, সি ++ ২০১১ এর সাথে আপনি যে কোনও উপায়ে আরম্ভকারী তালিকা ব্যবহার করতে চাইতে পারেন:
std::vector<int> v({ 1, 2, 3, 4, 5 });
std::vector<T>
সর্বদা T
অবজেক্টের মালিক । এটিতে দুটি বিষয় অন্তর্ভুক্ত রয়েছে: যখন কোনও ভেক্টরে কোনও বস্তু সন্নিবেশ করা হয় সেগুলি অনুলিপি করা হয় এবং এগুলি মেমোরিতে সংঘবদ্ধ হয়। যুক্তিসঙ্গত ছোট ছোট বস্তুর জন্য, যেমন ছোট স্ট্রিংয়ের ক্রম, সংঘটন একটি বড় কার্যকারিতা লাভ। যদি আপনার বিষয়গুলি অনুলিপি করা বড় এবং ব্যয়বহুল হয় তবে আপনি অবজেক্টগুলিতে [কোনওভাবে সংস্থানিত পরিচালিত] পয়েন্টার সংরক্ষণ করতে পারেন store কোন পদ্ধতিটি আরও দক্ষ তা বস্তুর উপর নির্ভর করে তবে আপনার পছন্দ আছে।
পয়েন্টারগুলি অন্য কোনও পুনরাবৃত্তির মতো ব্যবহার করা যেতে পারে:
int x[3] = {1, 2, 3};
std::vector<int> v(x, x + 3);
test(v)
const size_t X_SIZE = 3;
অ্যারের আকারটি চিহ্নিত করার জন্য ব্যবহার করা বা আকার থেকে এটি গণনা করতে। পঠনযোগ্যতার জন্য আমি সেই অংশটি বাদ দিয়েছি।
আপনি এখানে ভুল প্রশ্ন জিজ্ঞাসা করছেন - সব কিছু ভেক্টরে জোর করে না দিয়ে জিজ্ঞাসা করুন আপনি কীভাবে নির্দিষ্ট ধারকটির পরিবর্তে পুনরায় পুনরায় পুনরায় শ্রোতার সাথে কাজ করতে পরীক্ষা পরিবর্তন করতে পারেন can সামঞ্জস্যতা ধরে রাখতে আপনি ওভারলোড সরবরাহ করতে পারেন (এবং একই সাথে অন্যান্য পাত্রে বিনামূল্যে একই সাথে পরিচালনা করতে পারেন):
void test(const std::vector<int>& in) {
// Iterate over vector and do whatever
}
হয়ে:
template <typename Iterator>
void test(Iterator begin, const Iterator end) {
// Iterate over range and do whatever
}
template <typename Container>
void test(const Container& in) {
test(std::begin(in), std::end(in));
}
যা আপনাকে করতে দেয়:
int x[3]={1, 2, 3};
test(x); // Now correct
( আইডিয়ন ডেমো )
একটি সহজ উপায় ক্লাসে assign()
পূর্বনির্ধারিত ফাংশনের ব্যবহার হতে পারে vector
।
যেমন
array[5]={1,2,3,4,5};
vector<int> v;
v.assign(array, array+5); // 5 is size of array.
vector<int> a(5,10);
গড়make room for 5
int` এবং তাদের 10. কিন্তু কিভাবে আপনার এক্স, এক্স ... কাজের সঙ্গে আরম্ভ? তুমি কি ব্যাখ্যা করতে পারো?