Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Const Iterators | Iterators and Containers
/
C++ STL Iterators

bookConst Iterators

Svep för att visa menyn

Note
Definition

A const_iterator is a special type of iterator that enforces read-only access to container elements. When you use a const_iterator, you can traverse and examine elements but cannot modify them, ensuring the underlying data remains unchanged during iteration.

Understanding how to safely iterate over containers without accidentally modifying their contents is crucial in C++. Const iterators provide this safety by ensuring elements cannot be changed through the iterator. The syntax for declaring a const iterator typically uses container::const_iterator.

Alternatively, you can use the member functions cbegin() and cend() to obtain const iterators that point to the beginning and end of a container for read-only traversal. You should use const iterators whenever you need to guarantee that the elements will not be modified during iteration, such as when passing a container to a function that only needs to read its contents or when you want to signal intent to other programmers.

main.cpp

main.cpp

copy
12345678910111213141516171819
#include <iostream> #include <vector> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; // Using const_iterator explicitly std::cout << "Elements using const_iterator: "; for (std::vector<int>::const_iterator it = numbers.cbegin(); it != numbers.cend(); ++it) std::cout << *it << " "; std::cout << std::endl; // Using auto with cbegin() and cend() std::cout << "Elements using auto and cbegin/cend: "; for (auto it = numbers.cbegin(); it != numbers.cend(); ++it) std::cout << *it << " "; std::cout << std::endl; }

In the code above, both loops use const iterators to traverse the std::vector<int>. The first loop declares the iterator explicitly as std::vector<int>::const_iterator, while the second uses auto for brevity. In both cases, the iterators are obtained from cbegin() and cend(), which guarantee that the elements cannot be modified during iteration. If you attempt to assign a new value to *it, the compiler will produce an error, preserving const-correctness. This is especially important when you want to avoid accidental modification of container elements and make your intent clear to anyone reading or using your code.

main.cpp

main.cpp

copy
1234567891011
#include <vector> int main() { std::vector<int> numbers = {10, 20, 30}; for (auto it = numbers.cbegin(); it != numbers.cend(); ++it) { // Uncommenting the next line will cause a compilation error: // *it = 100; // error: assignment of read-only location '* it' } }

Attempting to modify elements through a const iterator, as in the commented-out line above, will result in a compilation error. This demonstrates the protection offered by const iterators: any code that tries to change the value pointed to by a const iterator will fail to compile. You should use const iterators in scenarios where read-only access is required, such as when exposing a container to client code that should not modify its contents or when implementing algorithms that must not alter the original data. The first code example showed how to safely read elements, while the second highlights how const iterators prevent accidental or unauthorized modification.

question mark

What is the main benefit of using const_iterator?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 3. Kapitel 3
some-alt