لیست (List)
لیست (List) مثل وکتور است اما فرق دارد. لیست می تواند از ابتدا و انتها عضو بگیرد یا حذف کند. اما برخلاف وکتور، دسترسی تصادفی ندارد. یعنی ایندکس گذاری مستقیم ممکن نیست.
تعریف سریع لیست در C++
لیست یک «ساختار داده (Data Structure)» پویاست. عناصر هم نوع نگه می دارد. برای استفاده باید هدرِ <list> را وارد کنی.
#include <list>
ساخت لیست
با کلیدواژه list و نوع داخل <> بساز. سپس نام بده.
list<string> cars;
می توانی هنگام تعریف مقداردهی کنی. سپس با حلقه چاپ کن.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
دسترسی در لیست
دسترسی با ایندکس ممکن نیست. اما .front() و .back() عنصر اول و آخر را می دهند.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.front();
cout << cars.back();
تغییر عنصر اول و آخر
می توانی مقدار عنصر اول و آخر را مستقیم عوض کنی.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.front() = "Opel";
cars.back() = "Toyota";
cout << cars.front();
cout << cars.back();
افزودن عناصر
با .push_front() در ابتدا، و با .push_back() در انتها اضافه کن.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.push_front("Tesla");
cars.push_back("VW");
حذف عناصر
با .pop_front() از ابتدا حذف کن. با .pop_back() از انتها حذف کن.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.pop_front();
cars.pop_back();
اندازه و خالی بودن
تعداد عناصر با .size() مشخص می شود. خالی بودن با .empty() برمی گردد.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.size();
list<string> cars;
cout << cars.empty();
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty();
حلقه روی لیست
حلقه for با ایندکس کار نمی کند. چون دسترسی ایندکسی نداریم.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < cars.size(); i++) {
cout << cars[i] << "\n";
}
ساده ترین روش، حلقه for-each است. خواناتر هم هست.
list<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
نکته: پیمایش با ایتریتور (Iterator) هم ممکن است. اگر دسترسی ایندکسی می خواهی، به وکتور فکر کن. برای مرور کلی هم ساختارهای داده و STL را ببین. همچنین لینک لیست را نگه دار.
تمرین سریع: سه گام
- یک لیست رشته ای بساز.
- چند خودرو جلو و عقب اضافه کن.
- با for-each همه را چاپ کن.
جمع بندی سریع
- لیست از ابتدا و انتها مدیریت می شود.
- ایندکس مستقیم در لیست نداریم.
- .front و .back بسیار کاربردی اند.
- .size و .empty وضعیت را می گویند.
- for-each بهترین پیمایش لیست است.