Cppreferences এর জন্য এই উদাহরণ কোডটি রয়েছে std::transform:
std::vector<std::size_t> ordinals;
std::transform(s.begin(), s.end(), std::back_inserter(ordinals),
[](unsigned char c) -> std::size_t { return c; });
তবে এটি আরও বলে:
std::transformunary_opবা এর অর্ডার প্রয়োগের গ্যারান্টি দেয় নাbinary_op। ক্রমটিকে ক্রমানুসারে ক্রম প্রয়োগ করতে বা ক্রমের উপাদানগুলিকে সংশোধন করে এমন একটি ফাংশন প্রয়োগ করতে, ব্যবহার করুনstd::for_each।
এটি সম্ভবত সমান্তরাল বাস্তবায়নের অনুমতি দেওয়ার জন্য। তবে তৃতীয় প্যারামিটারটি std::transformহ'ল LegacyOutputIteratorএর জন্য নিম্নলিখিত পোস্টকন্ডিশন রয়েছে ++r:
এই ক্রিয়াকলাপের পরে
rইনক্রিমেন্টেবল হওয়ার প্রয়োজন হয় না এবং এর আগের মানটির কোনও অনুলিপিrআর আর ডিফারেন্সযোগ্য বা ইনক্রিমেন্টেবল হয় না।
সুতরাং এটি আমার কাছে মনে হচ্ছে আউটপুট বরাদ্দ অবশ্যই অবশ্যই ঘটবে। এগুলির কি সহজভাবে বোঝায় যে প্রয়োগটি প্রয়োগের unary_opবাইরে চলে যেতে পারে এবং অস্থায়ী স্থানে সঞ্চিত হতে পারে তবে আউটপুটটিকে ক্রমে অনুলিপি করা হয়েছে? এটি এমন কিছু শোনাচ্ছে না যা আপনি কখনও করতে চান ever
বেশিরভাগ সি ++ গ্রন্থাগারগুলি আসলে সমান্তরাল এক্সিকিউটিউটর এখনও বাস্তবায়ন করতে পারেনি, তবে মাইক্রোসফ্ট করেছে। আমি নিশ্চিত এই প্রাসঙ্গিক কোড, এবং আমি মনে করি এটা কল এই populate()ফাংশন আউটপুট, যা নিশ্চয় কারণ করতে একটি বৈধ জিনিস না এর অংশ রেকর্ড iterators করার LegacyOutputIteratorএটা কপি বৃদ্ধিশীল দ্বারা invalidated করা যেতে পারে।
আমি কী মিস করছি?
sযা পুনরাবৃত্তিকারীদের অবৈধ করে।
std::transformনিষেধাজ্ঞার নীতিটি ব্যবহার করেন তবে এলোমেলো অ্যাক্সেসের পুনরুদ্ধারের প্রয়োজন যা back_inserterপূরণ করতে পারে না। আইএমও উদ্ধৃত অংশ ডকুমেন্টেশন সেই দৃশ্যের উল্লেখ করে। নথি ব্যবহারের ক্ষেত্রে নোট উদাহরণ std::back_inserter।
transformসংস্করণ সহ যা প্যারালাইলিজম ব্যবহার করবেন কি না তা স্থির করে।transformবড় ভেক্টরের জন্য ব্যর্থ।