সি ++ ভেক্টরকে রূপান্তর করুন <int> ভেক্টরে <ডাবল>>


97

কি একটি ভাল পরিষ্কার ভাবে রূপান্তর হয় std::vector<int> intVecথেকে std::vector<double> doubleVec। অথবা, আরও সাধারণভাবে, রূপান্তরযোগ্য ধরণের দুটি ভেক্টরকে রূপান্তর করতে?

উত্তর:


171

std::vectorএর ব্যাপ্তি নির্মাতা ব্যবহার করুন :

std::vector<int> intVec;
std::vector<double> doubleVec(intVec.begin(), intVec.end());

সুতরাং, আপনি কি std::copy(...)তাহলে ফাংশন ব্যবহার করতে পারেন ? আপনি কি উত্তর যোগ করতে পারেন?
অ্যালান টুরিং

4
@ লেক্স:, copy(v_int.begin(), v_int.end(), back_inserter(v_float));বাv_float.resize(v_int.size()); copy(v_int.begin(), v_int.end(), v_float.begin());
জন পুরি

4
খারাপ ধারণা, কারণ কনস্ট্রাক্টর সংস্করণটি পুনরুক্তিযোগ্য অ্যাক্সেসের পুনরাবৃত্তি এবং তারপরে পর্যাপ্ত স্থান সংরক্ষণ করে এটির পুনরুক্তিযোগ্য বিভাগটি ব্যবহার করে ভেক্টরকে চাপ দেবে। অনুলিপি করার পূর্বে পুনরায় আকার দেওয়া হ'ল অপ্রয়োজনীয় শূন্য সূচনা।
মাইকেল গোল্ডস্টেইন

4
@ মিশেলগোল্ডশটায়েন আমি বুঝতে পারি না - আপনি যদি আকারটি আগেই নির্দিষ্ট না করেন তবে যখন ক্ষমতা সীমা ছাড়িয়ে যাবে তখন এটি স্বয়ংক্রিয়ভাবে পুনরায় আকার দেওয়া হবে (যা বারবার সমস্ত উপাদানগুলির অনুলিপি করে)। ঠিক আছে, এটি রৈখিক সময়টুকু, তবে আমি বাজি ধরেছি যে এটি একটি একক 0-আরম্ভের চেয়ে এখনও অনেক ধীর er আমি কি আপনার যুক্তি সম্পর্কে কিছু মিস করছি?
আলগোম্যান

4
@ অ্যালগোম্যান দেখুন std::distance()"এটি যদি এলোমেলোভাবে অ্যাক্সেস পুনরুক্তিকারী হয় তবে ফাংশনটি এটি গণনা করতে অপারেটর ব্যবহার করে Otherwise অন্যথায়, ফাংশনটি বার বার বৃদ্ধি অপারেটর (অপারেটর ++) ব্যবহার করে" " সুতরাং এক্ষেত্রে পুনরায় বিয়োগকারীদের বিয়োগ করে উপাদানগুলির পরিমাণ খুঁজে পাওয়া যায়। প্রাথমিক রিজার্ভের জন্য স্ট্যান্ডার্ড :: দূরত্ব ব্যবহারের জন্য স্ট্যান্ডার্ড লাইব্রেরি প্রয়োগ করা হয়েছে কিনা তা অন্য প্রশ্ন, তবে Godbolt.org/z/6mcUFh কমপক্ষে স্টাড :: দূরত্ব () এর কল রয়েছে।
ব্যবহারকারী 1556435
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.