logo

كيفية الوصول إلى العناصر المتجهة في لغة C++

مقدمة

نظرًا لحجمها الديناميكي وبساطة استخدامها، تعد المتجهات من بين هياكل البيانات الأكثر استخدامًا في لغة C++. إنها توفر لك المرونة وسرعة استرجاع العناصر من خلال تمكينك من تخزين العناصر واستردادها في كتلة ذاكرة واحدة متجاورة. سوف تحصل على فهم شامل لكيفية استخدام المتجهات في هذا البرنامج التعليمي حيث ندرس عدة طرق للوصول إلى العناصر المتجهة في لغة C++.

1. الوصول إلى العناصر حسب الفهرس

يعد استخدام مؤشراتها من بين أسهل الطرق للوصول إلى العناصر المتجهة. يتم تعيين فهرس لكل عنصر في المتجه، بدءًا من 0 للعنصر الأول وزيادة بمقدار 1 لكل عضو آخر. استخدم عامل التشغيل المنخفض [] والفهرس المناسب لاسترداد عنصر في فهرس معين.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers[0]; // Accessing the first element int thirdElement = numbers[2]; // Accessing the third element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Third Element: ' << thirdElement << std::endl; return 0; } 

انتاج:

 First Element: 10 Third Element: 30 

2. استخدام وظيفة العضو at()

يعد استخدام وظيفة العضو at() أسلوبًا آخر للوصول إلى العناصر المتجهة. يوفر التابع at() إمكانية التحقق من الحدود للتأكد من عدم وصولك إلى العناصر الأكبر من المتجه. يتم طرح استثناء std::out_of_range إذا تم توفير فهرس خارج النطاق.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers.at(0); // Accessing the first element int thirdElement = numbers.at(2); // Accessing the third element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Third Element: ' << thirdElement << std::endl; return 0; } 

انتاج:

 First Element: 10 Third Element: 30 

3. العناصر الأمامية والخلفية

بالإضافة إلى ذلك، توفر المتجهات وصولاً مباشرًا إلى العنصر الأول والأخير عبر طريقتي العضو front() و Rear() على التوالي. عندما تحتاج ببساطة إلى الوصول إلى نقاط نهاية المتجه، تكون هذه الوظائف مفيدة جدًا.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; int firstElement = numbers.front(); // Accessing the first element int lastElement = numbers.back(); // Accessing the last element std::cout << 'First Element: ' << firstElement << std::endl; std::cout << 'Last Element: ' << lastElement << std::endl; return 0; } 

انتاج:

 First Element: 10 Last Element: 50 

4. استخدام التكرارات

تعد أدوات التكرار أداة فعالة للتنقل والوصول إلى العناصر الموجودة في الحاويات التي توفرها لغة C++. تأتي مُكرِّرات المتجهات في نسختين: begin() و end(). يشير مكرر end() إلى مكان واحد بعد العنصر الأخير، بينما يشير مكرر begin() إلى عضو البداية في المتجه. يمكنك الوصول إلى عناصر المتجه بالتكرار عليها باستخدام هذه التكرارات.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using iterators for (auto it = numbers.begin(); it != numbers.end(); ++it) { int element = *it; // Process the element std::cout << element << ' '; } std::cout << std::endl; return 0; } 

انتاج:

 10 20 30 40 50 

5. الوصول إلى العناصر باستخدام النطاق المستند إلى الحلقة

تم تقديم حلقة for المستندة إلى النطاق، والتي تعمل على تبسيط عملية التكرار عن طريق إدارة التكرارات تلقائيًا، في C++ 11. بدون صيانة التكرارات بشكل صريح، يمكنك الوصول إلى العناصر المتجهة باستخدام هذه الوظيفة.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using a range-based for loop for (int element : numbers) { // Process the element std::cout << element << ' '; } std::cout << std::endl; return 0; } 

انتاج:

 10 20 30 40 50 

6. الوصول إلى العناصر باستخدام المؤشرات

يتم تنفيذ المتجهات في لغة C++ كمصفوفة تم إنشاؤها ديناميكيًا، ويتم استخدام المؤشرات للوصول إلى عناصرها. يمكن استخدام دالة العضو data() للحصول على عنوان الذاكرة للعنصر الأول، ويمكن استخدام المؤشر الحسابي للحصول على عناوين العناصر المتعاقبة.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; // Accessing elements using pointers int* ptr = numbers.data(); // Get the pointer to the first element for (size_t i = 0; i <numbers.size(); ++i) { int element="*(ptr" + i); process the std::cout << ' '; } std::endl; return 0; < pre> <p> <strong>Output:</strong> </p> <pre> 10 20 30 40 50 </pre> <p> <strong>7. Checking Vector Size</strong> </p> <p>Verify that the vector is not empty before attempting to access any of its elements. Use the size() member function to determine a vector&apos;s size. Accessing the elements of an empty vector will result in unexpected behavior.</p> <pre> #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; if (!numbers.empty()) { // Access vector elements for (int element : numbers) { std::cout &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; } else { std::cout &lt;&lt; &apos;Vector is empty.&apos; &lt;&lt; std::endl; } return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> 10 20 30 40 50 </pre> <p> <strong>8. Modifying Vector Elements</strong> </p> <p>When you have access to vector elements, you may change them in addition to retrieving their values. Using any of the access techniques, you may give vector elements new values.</p> <pre> #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; numbers[2] = 35; // Modifying an element using index numbers.at(3) = 45; // Modifying an element using at() // Modifying the first and last elements numbers.front() = 15; numbers.back() = 55; // Printing the modified vector for (int element : numbers) { std::cout &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output:</strong> </p> <pre> 15 20 35 45 55 </pre> <p> <strong>9. Handling Out-of-Range Access</strong> </p> <p>When utilizing indices to access vector elements, it&apos;s crucial to confirm that the index falls within the acceptable range. Accessing items that are larger than the vector will lead to unpredictable behavior. Make careful to carry out the necessary bounds checking if you need to access items based on computations or user input to prevent any mistakes.</p> <pre> #include #include // Function to get user input size_t getUserInput() { size_t index; std::cout &lt;&gt; index; return index; } int main() { std::vector numbers = {10, 20, 30, 40, 50}; size_t index = getUserInput(); if (index <numbers.size()) { int element="numbers[index];" process the std::cout << 'element at index ' ': std::endl; } else handle out-of-range access 'invalid index. out of range.' return 0; < pre> <p> <strong>Output:</strong> </p> <pre> Enter the index: 2 Element at index 2: 30 </pre> <h3>Conclusion</h3> <p>The ability to access vector elements in C++ is essential for working with this flexible data format. Understanding the different approaches-including index-based access, iterators, pointers, and the range-based for loop-will enable you to reliably obtain and modify vector items as needed for your programmer. To prevent probable problems and undefinable behavior, bear in mind to handle bounds checking, care for vector size, and apply prudence.</p> <hr></numbers.size())></pre></numbers.size();>

7. التحقق من حجم المتجهات

تأكد من أن المتجه ليس فارغًا قبل محاولة الوصول إلى أي من عناصره. استخدم وظيفة العضو size() لتحديد حجم المتجه. سيؤدي الوصول إلى عناصر المتجه الفارغ إلى سلوك غير متوقع.

سلسلة في مجموعة جافا
 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; if (!numbers.empty()) { // Access vector elements for (int element : numbers) { std::cout &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; } else { std::cout &lt;&lt; &apos;Vector is empty.&apos; &lt;&lt; std::endl; } return 0; } 

انتاج:

 10 20 30 40 50 

8. تعديل العناصر المتجهة

عندما يكون لديك حق الوصول إلى العناصر المتجهة، يمكنك تغييرها بالإضافة إلى استرجاع قيمها. باستخدام أي من تقنيات الوصول، يمكنك إعطاء العناصر المتجهة قيمًا جديدة.

 #include #include int main() { std::vector numbers = {10, 20, 30, 40, 50}; numbers[2] = 35; // Modifying an element using index numbers.at(3) = 45; // Modifying an element using at() // Modifying the first and last elements numbers.front() = 15; numbers.back() = 55; // Printing the modified vector for (int element : numbers) { std::cout &lt;&lt; element &lt;&lt; &apos; &apos;; } std::cout &lt;&lt; std::endl; return 0; } 

انتاج:

 15 20 35 45 55 

9. التعامل مع الوصول خارج النطاق

عند استخدام المؤشرات للوصول إلى العناصر المتجهة، من المهم التأكد من أن المؤشر يقع ضمن النطاق المقبول. سيؤدي الوصول إلى العناصر الأكبر من المتجه إلى سلوك غير متوقع. احرص على إجراء فحص الحدود اللازمة إذا كنت بحاجة إلى الوصول إلى العناصر بناءً على الحسابات أو إدخال المستخدم لمنع أي أخطاء.

 #include #include // Function to get user input size_t getUserInput() { size_t index; std::cout &lt;&gt; index; return index; } int main() { std::vector numbers = {10, 20, 30, 40, 50}; size_t index = getUserInput(); if (index <numbers.size()) { int element="numbers[index];" process the std::cout << \'element at index \' \': std::endl; } else handle out-of-range access \'invalid index. out of range.\' return 0; < pre> <p> <strong>Output:</strong> </p> <pre> Enter the index: 2 Element at index 2: 30 </pre> <h3>Conclusion</h3> <p>The ability to access vector elements in C++ is essential for working with this flexible data format. Understanding the different approaches-including index-based access, iterators, pointers, and the range-based for loop-will enable you to reliably obtain and modify vector items as needed for your programmer. To prevent probable problems and undefinable behavior, bear in mind to handle bounds checking, care for vector size, and apply prudence.</p> <hr></numbers.size())>

خاتمة

تعد القدرة على الوصول إلى العناصر المتجهة في لغة C++ أمرًا ضروريًا للعمل مع تنسيق البيانات المرن هذا. إن فهم الأساليب المختلفة - بما في ذلك الوصول المستند إلى الفهرس، والمكررات، والمؤشرات، وحلقة for المستندة إلى النطاق - سيمكنك من الحصول على عناصر المتجهات وتعديلها بشكل موثوق حسب الحاجة للمبرمج الخاص بك. لمنع المشاكل المحتملة والسلوك غير القابل للتحديد، ضع في اعتبارك التعامل مع فحص الحدود، والعناية بحجم المتجه، وتطبيق الحكمة.