stl list begin
时间: 2023-10-02 13:13:24 浏览: 46
`std::list` 是 C++ STL 库中的一种容器,它是一个双向链表。它提供了许多常用的操作函数来管理链表,例如插入、删除、迭代器等等。下面是使用 `std::list` 的一些示例代码:
```c++
#include <iostream>
#include <list>
int main() {
std::list<int> my_list;
// 添加元素到链表尾部
my_list.push_back(1);
my_list.push_back(2);
my_list.push_back(3);
// 遍历链表并打印元素
for (auto it = my_list.begin(); it != my_list.end(); ++it) {
std::cout << *it << ' ';
}
std::cout << std::endl;
return 0;
}
```
上述代码中,我们首先创建了一个空的 `std::list` 对象 `my_list`。然后我们使用 `push_back()` 函数向链表尾部添加了三个元素。最后我们使用一个 for 循环遍历整个链表,使用迭代器 `it` 来指向链表中的每个元素,然后通过 `*it` 访问该元素的值。
相关问题
stl list 源码
以下是 STL 中 list 的部分源码:
```c++
template <class T, class Alloc = alloc>
class list {
protected:
typedef __list_node<T> list_node;
...
public:
typedef list_node* pointer;
...
class iterator {
public:
typedef bidirectional_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t difference_type;
typedef T* pointer;
typedef T& reference;
...
};
...
protected:
typedef simple_alloc<list_node, Alloc> list_node_allocator;
...
public:
iterator begin() { return (link_type) (*node).next; }
iterator end() { return (link_type) node; }
...
void push_front(const T& x) { insert(begin(), x); }
void push_back(const T& x) { insert(end(), x); }
...
iterator insert(iterator position, const T& x) {
list_node* tmp = create_node(x);
tmp->next = position.node;
tmp->prev = position.node->prev;
(link_type(position.node->prev))->next = tmp;
position.node->prev = tmp;
return tmp;
}
...
protected:
link_type node;
...
};
```
上述代码中,list 类继承自 __list_base,其中声明了 list_node 类型,用于表示双向链表的节点。list 迭代器 iterator 类型继承自 __list_iterator,其中定义了迭代器的各种属性和方法。list 中包含了指向双向链表的头节点的指针 node,并且提供了 insert、push_front、push_back 等函数,用于插入节点。在插入节点时,会调用 create_node 函数,用于创建一个新的节点。另外,list 的实现也使用了 STL 中的 allocator,用于分配和释放内存。
stllist迭代器
C++中的STL(List)迭代器是用于遍历和操作链表(List)中元素的一种方式。迭代器可以指向链表中的任意位置,并且可以通过迭代器进行元素的访问、插入、删除等操作。
STL的List迭代器有两种类型:正向迭代器和反向迭代器。正向迭代器用于从链表的头部开始遍历到尾部,而反向迭代器则相反,从尾部开始遍历到头部。
下面是一个使用STL List迭代器的简单示例代码:
```cpp
#include <iostream>
#include <list>
int main() {
std::list<int> myList = {1, 2, 3, 4, 5};
// 正向迭代器遍历链表
std::list<int>::iterator it;
for (it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 反向迭代器遍历链表
std::list<int>::reverse_iterator rit;
for (rit = myList.rbegin(); rit != myList.rend(); ++rit) {
std::cout << *rit << " ";
}
std::cout << std::endl;
return 0;
}
```
上述代码中,我们首先创建了一个包含1到5的链表`myList`。然后使用正向迭代器`std::list<int>::iterator`遍历链表并输出元素。接着使用反向迭代器`std::list<int>::reverse_iterator`从尾部开始遍历链表并输出元素。
运行上述代码,输出结果为:
```
1 2 3 4 5
5 4 3 2 1
```
这就是使用STL List迭代器遍历链表的基本示例。你可以根据需要使用迭代器进行元素的访问、插入、删除等操作。