std::รายการใน C++ พร้อมตัวอย่าง

std::รายการคืออะไร?

In C++รายการ std::list อ้างถึงคอนเทนเนอร์ที่เก็บข้อมูล std:list ช่วยให้คุณสามารถแทรกและลบรายการได้จากทุกที่ รายการ std::list ถูกนำมาใช้เป็นรายการที่มีการเชื่อมโยงแบบทวีคูณ ซึ่งหมายความว่าข้อมูลรายการสามารถเข้าถึงได้แบบสองทิศทางและตามลำดับ

รายการไลบรารีเทมเพลตมาตรฐานไม่รองรับการเข้าถึงแบบสุ่มอย่างรวดเร็ว แต่รองรับการเข้าถึงตามลำดับจากทุกทิศทาง

คุณสามารถกระจายองค์ประกอบรายการในส่วนหน่วยความจำต่างๆ ได้ ข้อมูลที่จำเป็นสำหรับการเข้าถึงข้อมูลตามลำดับจะถูกจัดเก็บไว้ในคอนเทนเนอร์ รายการ std::สามารถขยายและย่อจากปลายทั้งสองด้านได้ตามต้องการในระหว่างรันไทม์ ตัวจัดสรรภายในจะตอบสนองความต้องการพื้นที่เก็บข้อมูลโดยอัตโนมัติ

เหตุใดจึงใช้ std::list

นี่คือเหตุผลของการใช้ std::List :

  • std::list ทำได้ดีกว่าเมื่อเปรียบเทียบกับคอนเทนเนอร์ลำดับอื่นๆ เช่น array และ vector
  • มีประสิทธิภาพที่ดีกว่าในการแทรก ย้าย และแยกองค์ประกอบออกจากตำแหน่งใดๆ
  • std::list ยังทำงานได้ดีขึ้นกับอัลกอริทึมที่ดำเนินการอย่างเข้มข้นดังกล่าวอีกด้วย

ไวยากรณ์รายการ

ในการกำหนดรายการ std:: เราต้องนำเข้าไฟล์ ไฟล์ส่วนหัว นี่คือไวยากรณ์คำจำกัดความ std::list:

template < class Type, class Alloc =allocator<T> > class list;

นี่คือคำอธิบายของพารามิเตอร์ข้างต้น:

  • T – กำหนดประเภทขององค์ประกอบที่มีอยู่ คุณสามารถแทนที่ T ด้วยประเภทข้อมูลใดก็ได้ แม้แต่ประเภทที่ผู้ใช้กำหนดก็ตาม
  • จัดสรร – กำหนดประเภทของออบเจ็กต์ตัวจัดสรร ซึ่งจะใช้เทมเพลตคลาสตัวจัดสรรตามค่าเริ่มต้น ขึ้นอยู่กับค่าและใช้แบบจำลองการจัดสรรหน่วยความจำอย่างง่าย

ตัวอย่าง 1

#include <algorithm>
#include <iostream>
#include <list>
int main() {
	std::list<int> my_list = { 12, 5, 10, 9 };

	for (int x : my_list) {
		std::cout << x << '\n';
	}
}

Output:

มาตรฐาน::รายการ

นี่คือภาพหน้าจอของรหัส:

มาตรฐาน::รายการ

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัวของอัลกอริทึมเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัว iostream เพื่อใช้ฟังก์ชันต่างๆ
  3. รวมไฟล์ส่วนหัวของรายการเพื่อใช้ฟังก์ชันต่างๆ
  4. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  5. สร้างรายการชื่อ my_list ด้วยชุดจำนวนเต็ม 4 ตัว
  6. ใช้ for loop เพื่อสร้างตัวแปร loop x ตัวแปรนี้จะถูกนำมาใช้เพื่อวนซ้ำองค์ประกอบรายการ
  7. พิมพ์ค่าของรายการบนคอนโซล
  8. ส่วนปลายของลำตัว สำหรับห่วง.
  9. ส่วนท้ายของฟังก์ชัน main()

C++ รายการฟังก์ชั่น

ต่อไปนี้เป็นฟังก์ชัน std::list ทั่วไป:

ฟังก์ชัน Descriptไอออน
แทรก() ฟังก์ชันนี้จะแทรกรายการใหม่ก่อนตำแหน่งที่ตัววนซ้ำชี้
ผลักดัน_กลับ() ฟังก์ชันนี้จะเพิ่มรายการใหม่ที่ส่วนท้ายของรายการ
push_front() โดยจะเพิ่มรายการใหม่ที่ด้านหน้าของรายการ
pop_front() มันจะลบรายการแรกของรายการ
ขนาด() ฟังก์ชันนี้กำหนดจำนวนองค์ประกอบรายการ
ด้านหน้า() เพื่อกำหนดรายการแรกของรายการ
กลับ() เพื่อกำหนดรายการสุดท้ายของรายการ
ย้อนกลับ () มันกลับรายการ
ผสาน() มันรวมสองรายการที่เรียงลำดับเข้าด้วยกัน

คอนสตรัคเตอร์

นี่คือรายการของ ฟังก์ชั่น จัดทำโดย ไฟล์ส่วนหัว:

  • ตัวสร้างเริ่มต้น std::list::list()- มันสร้างรายการว่างที่มีองค์ประกอบเป็นศูนย์
  • Fill Constructor std::list::list()- สร้างรายการที่มีองค์ประกอบ n และกำหนดค่าเป็นศูนย์ (0) ให้กับแต่ละองค์ประกอบ
  • ตัวสร้างช่วง std::list::list()- สร้างรายการที่มีองค์ประกอบมากมายในช่วงแรกถึงสุดท้าย
  • คัดลอกตัวสร้าง std::list::list()- สร้างรายการพร้อมสำเนาของแต่ละองค์ประกอบที่มีอยู่ในรายการที่มีอยู่
  • Move Constructor std::list::list()- สร้างรายการที่มีองค์ประกอบของรายการอื่นโดยใช้ความหมายการย้าย
  • ตัวสร้างรายการ Initializer std::list::list()-มันสร้างรายการที่มีองค์ประกอบของรายการอื่นโดยใช้ซีแมนทิกส์การย้าย

2 ตัวอย่าง

#include <iostream>
#include <list>
using namespace std;
int main(void) {
	list<int> l;
	list<int> l1 = { 10, 20, 30 };
	list<int> l2(l1.begin(), l1.end());
	list<int> l3(move(l1));  
	cout << "Size of list l: " << l.size() << endl;
	cout << "List l2 contents: " << endl;
	for (auto it = l2.begin(); it != l2.end(); ++it)
	      cout << *it << endl;
	cout << "List l3 contents: " << endl;
	for (auto it = l3.begin(); it != l3.end(); ++it)
		cout << *it << endl;
	return 0;
}

Output:

รายการตัวสร้าง

นี่คือภาพหน้าจอของรหัส:

รายการตัวสร้าง

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัว iostream เพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัวของรายการเพื่อใช้ฟังก์ชันต่างๆ
  3. รวมเนมสเปซมาตรฐานในโค้ดเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  4. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  5. สร้างรายการว่างชื่อ l
  6. สร้างรายการชื่อ l1 โดยมีชุดจำนวนเต็ม 3 ตัว
  7. สร้างรายการชื่อ l2 โดยมีองค์ประกอบทั้งหมดในรายการชื่อ l1 ตั้งแต่ต้นจนจบ
  8. สร้างรายการชื่อ l3 โดยใช้อรรถศาสตร์การย้าย รายการ l3 จะมีเนื้อหาเหมือนกับรายการ l2
  9. พิมพ์ขนาดของรายการชื่อ l บนคอนโซลควบคู่ไปกับข้อความอื่น
  10. พิมพ์ข้อความบนคอนโซล
  11. สร้างตัววนซ้ำตั้งชื่อมันและใช้เพื่อวนซ้ำองค์ประกอบของรายการที่ชื่อ l2
  12. พิมพ์องค์ประกอบของรายการชื่อ l2 บนคอนโซล
  13. พิมพ์ข้อความบนคอนโซล
  14. สร้างตัววนซ้ำตั้งชื่อมันและใช้เพื่อวนซ้ำองค์ประกอบของรายการที่ชื่อ l3
  15. พิมพ์องค์ประกอบของรายการชื่อ l3 บนคอนโซล
  16. โปรแกรมจะต้องคืนค่าเมื่อเสร็จสิ้นสำเร็จ
  17. ส่วนท้ายของฟังก์ชัน main()

คุณสมบัติของคอนเทนเนอร์

นี่คือรายการคุณสมบัติคอนเทนเนอร์:

อสังหาริมทรัพย์ Descriptไอออน
ลำดับ คอนเทนเนอร์ลำดับจะเรียงลำดับองค์ประกอบตามลำดับเชิงเส้นที่เข้มงวด เข้าถึงองค์ประกอบต่างๆ ตามตำแหน่งในลำดับ
รายการที่เชื่อมโยงแบบทวีคูณ องค์ประกอบแต่ละองค์ประกอบจะมีข้อมูลเกี่ยวกับวิธีการค้นหาองค์ประกอบก่อนหน้าและถัดไป ซึ่งช่วยให้มีเวลาคงที่สำหรับการแทรกและการลบ
ผู้จัดสรรทราบ วัตถุตัวจัดสรรใช้สำหรับการปรับเปลี่ยนขนาดพื้นที่เก็บข้อมูลแบบไดนามิก

การแทรกลงในรายการ

มีฟังก์ชันต่างๆ ที่เราสามารถใช้เพื่อแทรกค่าลงในรายการได้ มาสาธิตสิ่งนี้กัน:

3 ตัวอย่าง

#include <algorithm>
#include <iostream>
#include <list>
int main() {
	std::list<int> my_list = { 12, 5, 10, 9 };
	my_list.push_front(11);
	my_list.push_back(18);
	auto it = std::find(my_list.begin(), my_list.end(), 10);
	if (it != my_list.end()) {
		my_list.insert(it, 21);
	}
	for (int x : my_list) {
		std::cout << x << '\n';
	}
}

Output:

การแทรกลงในรายการ

นี่คือภาพหน้าจอของรหัส:

การแทรกลงในรายการ

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัวของอัลกอริทึมเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัว iostream เพื่อใช้ฟังก์ชันต่างๆ
  3. รวมไฟล์ส่วนหัวของรายการเพื่อใช้ฟังก์ชันต่างๆ
  4. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  5. สร้างรายการชื่อ my_list ด้วยชุดจำนวนเต็ม 4 ตัว
  6. แทรกองค์ประกอบ 11 ที่ด้านหน้าของรายการชื่อ my_list
  7. แทรกองค์ประกอบ 18 ที่ส่วนท้ายของรายการชื่อ my_list
  8. สร้างตัววนซ้ำและใช้เพื่อค้นหาองค์ประกอบ 10 จากรายการ my_list
  9. ใช้คำสั่ง if เพื่อตรวจสอบว่าพบองค์ประกอบข้างต้นหรือไม่
  10. แทรกองค์ประกอบ 21 ก่อนองค์ประกอบด้านบนหากพบ
  11. ส่วนท้ายของคำสั่ง if
  12. ใช้ for loop เพื่อสร้างตัวแปร loop x ตัวแปรนี้จะถูกนำมาใช้เพื่อวนซ้ำองค์ประกอบรายการ
  13. พิมพ์ค่าของรายการบนคอนโซล
  14. ส่วนท้ายของตัว for a loop
  15. ส่วนท้ายของฟังก์ชัน main()

การลบออกจากรายการ

สามารถลบรายการออกจากรายการได้ ฟังก์ชั่นลบ () ช่วยให้คุณสามารถลบรายการหรือช่วงของรายการออกจากรายการได้

  • หากต้องการลบรายการเดียว คุณเพียงแค่ผ่านตำแหน่งจำนวนเต็มหนึ่งตำแหน่ง รายการจะถูกลบ
  • หากต้องการลบช่วง คุณต้องผ่านตัววนเริ่มต้นและตัววนสิ้นสุด มาสาธิตสิ่งนี้กัน

4 ตัวอย่าง

#include <algorithm>
#include <iostream>
#include <list>
using namespace std;
int main() {
	std::list<int> my_list = { 12, 5, 10, 9 };
	cout << "List elements before deletion: ";
	for (int x : my_list) {
		std::cout << x << '\n';
	}
	list<int>::iterator i = my_list.begin();
	my_list.erase(i);
	cout << "\nList elements after deletion: ";
	for (int x : my_list) {
		std::cout << x << '\n';
	}
	return 0;
}

Output:

การลบออกจากรายการ

นี่คือภาพหน้าจอของรหัส:

การลบออกจากรายการ

คำอธิบายรหัส:

  1. รวมไฟล์ส่วนหัวของอัลกอริทึมเพื่อใช้ฟังก์ชันต่างๆ
  2. รวมไฟล์ส่วนหัว iostream เพื่อใช้ฟังก์ชันต่างๆ
  3. รวมไฟล์ส่วนหัวของรายการเพื่อใช้ฟังก์ชันต่างๆ
  4. รวมเนมสเปซมาตรฐานในโปรแกรมของเราเพื่อใช้คลาสโดยไม่ต้องเรียกมัน
  5. เรียกใช้ฟังก์ชัน main() ควรเพิ่มตรรกะของโปรแกรมภายในเนื้อหาของฟังก์ชันนี้
  6. สร้างรายการชื่อ my_list ด้วยชุดจำนวนเต็ม 4 ตัว
  7. พิมพ์ข้อความบนคอนโซล
  8. ใช้ for loop เพื่อสร้างตัวแปร loop x ตัวแปรนี้จะถูกนำมาใช้เพื่อวนซ้ำองค์ประกอบรายการ
  9. พิมพ์ค่าของรายการบนคอนโซล
  10. ส่วนท้ายของ for loop
  11. สร้างตัววนซ้ำ i ที่ชี้ไปยังองค์ประกอบแรกของรายการ
  12. ใช้ฟังก์ชันลบ () ชี้โดยตัววนซ้ำ i
  13. พิมพ์ข้อความบนคอนโซล
  14. ใช้ for loop เพื่อสร้างตัวแปร loop x ตัวแปรนี้จะถูกนำมาใช้เพื่อวนซ้ำองค์ประกอบรายการ
  15. พิมพ์ค่าของรายการบนคอนโซล สิ่งนี้เกิดขึ้นหลังจากการลบ
  16. ส่วนท้ายของ for loop
  17. โปรแกรมจะต้องส่งคืนค่าเมื่อดำเนินการเสร็จสิ้น
  18. ส่วนท้ายของฟังก์ชัน main()

สรุป

  • std::list เป็นคอนเทนเนอร์ที่เก็บข้อมูล
  • ช่วยให้สามารถแทรกและลบรายการได้จากทุกที่ในเวลาคงที่
  • มันถูกนำไปใช้เป็นลิงค์คู่
  • ข้อมูล std::list สามารถเข้าถึงได้แบบสองทิศทางและตามลำดับ
  • std::list ไม่รองรับการเข้าถึงแบบสุ่มอย่างรวดเร็ว อย่างไรก็ตาม รองรับการเข้าถึงตามลำดับจากทุกทิศทาง
  • คุณสามารถกระจายองค์ประกอบรายการของ std::list ในส่วนหน่วยความจำที่แตกต่างกัน
  • คุณสามารถย่อหรือขยาย std::list จากปลายทั้งสองข้างได้ตามต้องการระหว่างรันไทม์
  • ในการแทรกรายการต่างๆ ลงใน std::list เราใช้ฟังก์ชัน insert()
  • หากต้องการลบรายการออกจาก std::list เราใช้ฟังก์ชันลบ ()