در این مقاله، راهحلی برای جابجایی دو بلوک حافظه مجاور با استفاده از فقط نشانگرهای رو به جلو ارائه شده است. این روش از تابع std::rotate استفاده میکند که فقط به نشانگرهای رو به جلو نیاز دارد. الگوریتم با تعویض عناصر در ابتدا و میانه شروع میشود و سپس نشانگرها را افزایش میدهد. در صورتی که بلوک A بزرگتر از بلوک B باشد، کل بلوک B به ابتدای بافر منتقل میشود و بخشی از بلوک A (A1) به انتهای بافر منتقل میشود. سپس یک فراخوانی بازگشتی به std::rotate برای جابجایی A1 و A2 استفاده میشود. در صورتی که بلوک A کوچکتر از بلوک B باشد، کل بلوک A به وسط بافر منتقل میشود و بخشی از بلوک B (B1) به ابتدای بافر منتقل میشود. دوباره، یک فراخوانی بازگشتی به std::rotate برای جابجایی A و B2 استفاده میشود. در نهایت، در صورتی که بلوکها یکسان باشند، تمام عناصر B با عناصر A تعویض میشوند. این روش تضمین میکند که فراخوانی بازگشتی همیشه کوچکتر از فراخوانی اصلی است، بنابراین تضمین میشود که بازگشت به پایان میرسد.
مشاهده مطلب اصلی