การเพิ่มพอยน์เตอร์เป็นสำนวน C ++, เพราะซีแมนทิกส์ตัวชี้สะท้อนลักษณะพื้นฐานของปรัชญาการออกแบบที่อยู่เบื้องหลังไลบรารีมาตรฐาน C ++ (อิงจากSTLของ Alexander Stepanov )
แนวคิดที่สำคัญในที่นี้คือ STL ได้รับการออกแบบรอบคอนเทนเนอร์อัลกอริทึมและตัววนซ้ำ ชี้เป็นเพียงiterators
แน่นอนความสามารถในการเพิ่ม (หรือเพิ่ม / ลบ) ตัวชี้กลับไปที่ C อัลกอริธึมการจัดการสตริง C จำนวนมากสามารถเขียนได้อย่างง่ายดายโดยใช้ตัวชี้ทางคณิตศาสตร์ พิจารณารหัสต่อไปนี้:
char string1[4] = "abc";
char string2[4];
char* src = string1;
char* dest = string2;
while ((*dest++ = *src++));
รหัสนี้ใช้เลขคณิตของตัวชี้เพื่อคัดลอก C-string ที่มีค่า Null การวนซ้ำจะสิ้นสุดลงโดยอัตโนมัติเมื่อพบโมฆะ
ด้วย C ++ ความหมายชี้กำลังทั่วไปกับแนวคิดของiterators คอนเทนเนอร์ C ++ มาตรฐานส่วนใหญ่จะมีตัววนซ้ำซึ่งสามารถเข้าถึงได้ผ่านฟังก์ชั่นbegin
และend
สมาชิก ตัวทำซ้ำทำตัวเหมือนพอยน์เตอร์ซึ่งสามารถเพิ่มขึ้น dereferenced และบางครั้งมีค่าลดลงหรือขั้นสูง
เพื่อย้ำมากกว่าstd::string
เราจะพูดว่า:
std::string s = "abcdef";
std::string::iterator it = s.begin();
for (; it != s.end(); ++it) std::cout << *it;
เราเพิ่มตัววนซ้ำเหมือนเราจะเพิ่มตัวชี้ไปยัง C-string ธรรมดา เหตุผลที่แนวคิดนี้มีประสิทธิภาพเพราะคุณสามารถใช้เทมเพลตเพื่อเขียนฟังก์ชั่นที่จะทำงานกับตัววนซ้ำชนิดใดก็ได้ที่ตรงตามข้อกำหนดของแนวคิดที่จำเป็น และนี่คือพลังของ STL:
std::string s1 = "abcdef";
std::vector<char> buf;
std::copy(s1.begin(), s1.end(), std::back_inserter(buf));
รหัสนี้คัดลอกสตริงลงในเวกเตอร์ copy
ฟังก์ชั่นเป็นแม่แบบที่จะทำงานร่วมกับใด ๆ iterator ที่สนับสนุนการเพิ่ม (ซึ่งรวมถึงตัวชี้ธรรมดา) เราสามารถใช้copy
ฟังก์ชั่นเดียวกันกับ C-string ธรรมดา:
const char* s1 = "abcdef";
std::vector<char> buf;
std::copy(s1, s1 + std::strlen(s1), std::back_inserter(buf));
เราสามารถใช้copy
บนstd::map
หรือstd::set
หรือใด ๆภาชนะที่กำหนดเองที่ iterators สนับสนุน
โปรดทราบว่าพอยน์เตอร์เป็นประเภทเฉพาะของ iterator: random access iteratorซึ่งหมายความว่ารองรับการเพิ่มขึ้นลดลงและล้ำหน้าด้วยตัวดำเนินการ+
และ -
ชนิดตัววนซ้ำอื่น ๆ สนับสนุนชุดย่อยของซีแมนติกพอยน์เตอร์เท่านั้น: ตัววนซ้ำสองทิศทางสนับสนุนการเพิ่มและการลดลงอย่างน้อย; ไปข้างหน้า iteratorสนับสนุนที่ incrementing น้อย (ทุกชนิดตัววนซ้ำสนับสนุนการยกเลิกการลงทะเบียน) copy
ฟังก์ชันต้องการตัววนซ้ำที่อย่างน้อยรองรับการเพิ่มขึ้น
คุณสามารถอ่านเกี่ยวกับแนวคิด iterator ที่แตกต่างกันที่นี่
ดังนั้นการเพิ่มพอยน์เตอร์จึงเป็นวิธี C ++ ที่ใช้ในการวนซ้ำใน C-array หรือเข้าถึงองค์ประกอบ / ออฟเซ็ตใน C-array