1. Iterator
Iterator is a way to access all containers programmatically!. It’s an object that point to elements inside containers.
It allows iterating over any container, whether ordered, unordered, sequence, or associative! Each STL container has its own iterator, but all of these iterators exhibit a similar behavior!
Generally, STL iterators support the following operations. Take set for examplestd::set<type> s = {0,1,2,3}
:
- Get the iterator of the first element:
std::set::iterator iter = s.begin()
; - Get the iterator of the next element:
++iter
; - Get the element which
iter
point to:*iter
; - Compare iterator equality:
(iter != s.end())
; - Copy construction:
auto second_iter = iter
;
Why
++iter
?++iter
returns the value after being incremented, whileiter++
returns the previous value and then increments it.
There are a few different types of iterators, since containers are different. All iterators can be incremented(++). Input iterators can be on the RHS(Right hand side) of an =
sign(for example: auto elem = *it
). Output iterators can be on the LHS of an =
sign(for example: *elem = value
).
Container | Type of Iterator |
---|---|
Vector | Random-Access |
Deque | Random-Access |
List | Bidirectional(双向的) |
Map | Bidirectional |
Set | Bidirectional |
Stack | No Iterator |
Queue | No Iterator |
Priority Queue | No Iterator |
Random access iterators support indexing by integers!
1 | iter += 3; // move forward by 3 |
Using iterator
for looping over collections.
1 | std::set<int> set{3,1,2,4}; |
2. Pointers
These are equivalent(等价的), but why?
1 | std::pair<int, int> my_pair{{1,2}, {3,4}}; |
Pointer is one of the main strengths of C++: accessing objects by address!
When variables are created, they’re given an address in memory. Pointers are objects that store an address and type of a variable. Adding a &
before a variable returns its address, just like passing by reference!
1 | int x = 3; |
To get the value of a pointer, we can dereference it(get the object referenced by the pointer) using *
.
1 | int y = *(p); |
A shorthand for deferencing a pointer and then accessing a member variable(doing someObject.variableName
) is using the ->
operator.
Iterators are a form of pointers! Pointers are more generic(通用的) iterators, because they can point to any object, not just elements in a container!
1 | std::string lands = "xadia"; |
- 本文作者: 夏花
- 本文链接: http://xiahua19.github.io/2022/07/24/cs106l-6-Iterators-and-Pointers/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!