Mohamed Ahmed181 نشر 16 فبراير أرسل تقرير نشر 16 فبراير ازاي ال output اترتب لوحده كده؟ #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> firstnumbers = { 10, 30, 50, 70 }; vector<int> secondnumbers = { 20, 40, 60, 80 }; vector<int> total(firstnumbers.size() + secondnumbers.size()); merge(firstnumbers.begin(), firstnumbers.end(), secondnumbers.begin(), secondnumbers.end(), total.begin()); for(int val : total){ cout << val << endl; } return 0; } Output = 10 \ 20 \30 \40 \50 \60 \70 \80 2 اقتباس
0 Mustafa Mahmoud7 نشر 16 فبراير أرسل تقرير نشر 16 فبراير (معدل) هذا بسبب أن الدالة () merge تأخذ عناصر مصفوفتين مرتبتين وتدمجهم وتعطي لنا مصفوفة واحدة مرتبة مكونة من عناصر المصفوفتين. ()firstnumbers.begin: المؤشر الذي يشير إلى العنصر الأول في مصفوفة firstnumbers. سيتم بدء عملية الدمج من هذا الموقع في المصفوفة الأولى. ()firstnumbers.end : المؤشر يشير إلى موقع بعد العنصر الأخير في مصفوفة firstnumbers. يمثل هذا نهاية المدى الذي سيتم دمجه في المصفوفة الأولى. ()secondnumbers.begin : المؤشر يشير إلى العنصر الأول في مصفوفة secondnumbers. سيتم بدء عملية الدمج من هذا الموقع في المصفوفة الثانية. ()secondnumbers.end : المؤشر يشير إلى موقع بعد العنصر الأخير في مصفوفة secondnumbers. يمثل هذا نهاية المدى الذي سيتم دمجه في المصفوفة الثانية. ()total.begin : المؤشر يشير إلى الموقع الذي سيبدأ فيه تخزين العناصر المدموجة. بمجرد دمج العناصر، سيتم تخزينها في المصفوفة total ابتداءً من هذا الموقع. تم التعديل في 16 فبراير بواسطة Mustafa Mahmoud7 اقتباس
0 ياسر مسكين نشر 17 فبراير أرسل تقرير نشر 17 فبراير لأنه عند استخدامنا لدالة `merge` في C++ وكانت البيانات الداخلة مرتبة بالفعل، فإن الناتج سيكون أيضا مرتبا، وهذا يعني أنه عند دمج `firstnumbers` و `secondnumbers` في `total`، سيتم ترتيب الأرقام بشكل طبيعي. السبب الرئيسي لذلك هو أن `merge` لا تقوم فقط بدمج العناصر بل تقوم بترتيبها أثناء الدمج. في الحقيقة، الدالة `merge` تتوقع أن يكون كل من `firstnumbers` و `secondnumbers` مرتبا مسبقا، وتقوم بالمزامنة بين القيم في كل فهرس لإنتاج فهرس مرتب. ففي الكود التي قدمته، الأرقام في `firstnumbers` و `secondnumbers` مرتبة بالفعل بشكل صاعد، لهذا فإن الدالة `merge` ستقوم بدمجها بشكل مرتب في `total`.وهذا هو السبب في أن الناتج النهائي كان مرتبًا بشكل صاعد. بمعنى آخر، الترتيب الذي حصلت عليه هو نتيجة مباشرة من طريقة عمل دالة `merge` والتي تتوقع بدورها بأن البيانات المدخلة مرتبة بالفعل. اقتباس
0 Taha Khaled2 نشر 17 فبراير أرسل تقرير نشر 17 فبراير السبب في طباعة الأرقام بهذا الترتيب هو أن الأرقام في الفيكتور firstnumbers مرتبة بالترتيب التصاعدي (10، 30، 50، 70)، و الأرقام في الفيكتور secondnumbers مرتبة أيضًا بالترتيب التصاعدي (20، 40، 60، 80). وبعد ذالك يتم دمج هذين الفيكتورين باستخدام الدالة ()merge التي تأخذ مدى العناصر في الفيكتورين المدخلين، وترتبهما معًا في الفيكتور total بترتيب تصاعدي أيضًا. وبما أن الأرقام في الفيكتور firstnumbers و secondnumbers مرتبة بالترتيب التصاعدي، فإن الأرقام في الفيكتور total (الذي تم دمجهما) ستكون مرتبة بالترتيب التصاعدي أيضًا، مما سيعطيك الناتج الذي حصلت عليه (10، 20، 30، 40، 50، 60، 70، 80). هذه الكود يستخدم خوارزمية الاندماج هذه الخوارزمية تحافظ على الترتيب النسبي للعناصر المتساوية. تعقيد خوارزمية الاندماج O(n log n) ، ده هيجعلها جيده لفرز مجموعات البيانات الكبيرة. بلاضافه إذا كانت المتجهات المدخلة مرتبة بالفعل، فلن تتطلب عملية الاندماج أي مقارنات أو عمليات تبادل، ده هيؤدي الي تحسن الأداء. ساعطيك اكثر من مثال سيساعدك في فهمها اكثر 1. دمج متجهين من الأرقام: #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> firstnumbers = { 1, 4, 7, 10 }; vector<int> secondnumbers = { 2, 5, 8, 11 }; vector<int> total(firstnumbers.size() + secondnumbers.size()); merge(firstnumbers.begin(), firstnumbers.end(), secondnumbers.begin(), secondnumbers.end(), total.begin()); for (int val : total) { cout << val << " "; } cout << endl; return 0; } المخرجات 1 2 4 5 7 8 10 11 2. دمج متجهين من النصوص: #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<string> firstnames = { "Alice", "Bob", "Carol" }; vector<string> lastnames = { "Smith", "Jones", "Williams" }; vector<string> fullnames(firstnames.size() + lastnames.size()); merge(firstnames.begin(), firstnames.end(), lastnames.begin(), lastnames.end(), fullnames.begin(), [](string a, string b) { return a + " " + b; }); for (string name : fullnames) { cout << name << endl; } return 0; } المخرجات Alice Smith Bob Jones Carol Williams اقتباس
السؤال
Mohamed Ahmed181
ازاي ال output اترتب لوحده كده؟
Output = 10 \ 20 \30 \40 \50 \60 \70 \80
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.