std::list尾部插入链表
时间: 2024-10-05 21:03:48 浏览: 19
在C++标准模板库(STL)中,`std::list`是一种双向链表容器,它提供了一种高效的元素动态添加和删除操作。如果你想在`std::list`的尾部插入新元素,你可以直接使用`push_back()`函数。这个函数会在链表的最后一个节点之后插入新的元素,而无需移动其他节点。
例如:
```cpp
#include <iostream>
#include <list>
int main() {
std::list<int> myList; // 创建一个空列表
// 在尾部插入元素
myList.push_back(1); // 链表变为 [1]
myList.push_back(2); // 链表变为 [1, 2]
myList.push_back(3); // 链表变为 [1, 2, 3]
for (const auto& element : myList) {
std::cout << element << " ";
}
return 0;
}
```
在这个例子中,每次调用`push_back()`都会将新的整数元素追加到列表的最后。
相关问题
如何使用std::list链表
在C++中,可以使用标准库`<list>`中的`std::list`来实现链表。下面是一个简单的示例代码:
```c++
#include <iostream>
#include <list>
int main() {
std::list<int> my_list; // 声明一个空list
// 在list尾部添加元素
my_list.push_back(1);
my_list.push_back(2);
my_list.push_back(3);
// 在list头部添加元素
my_list.push_front(0);
// 遍历list并输出每个元素
for (auto it = my_list.begin(); it != my_list.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 在list中间插入元素
auto it = my_list.begin();
++it;
my_list.insert(it, 4);
// 删除list中的元素
it = my_list.begin();
++it;
my_list.erase(it);
// 再次遍历list并输出每个元素
for (auto it = my_list.begin(); it != my_list.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
0 1 2 3
0 2 3
```
在这个示例代码中,我们首先声明一个空的`std::list<int>`,然后使用`push_back()`和`push_front()`函数向list中添加元素。接着,我们使用迭代器遍历list并输出每个元素。然后,我们使用`insert()`函数在list中间插入一个元素,使用`erase()`函数删除list中的一个元素。最后,我们再次遍历list并输出每个元素。
std::list在头尾插入和删除与std::vector在头尾插入和删除哪个效率更高
在头部插入和删除操作上,std::list的效率比std::vector更高,因为std::list的元素在内存中是分散存储的,每个元素只需要改变前后指针的指向就可以完成插入和删除操作,而不需要进行元素的移动。而std::vector的元素在内存中是连续存储的,因此在头部插入和删除时需要移动后面的元素,效率较低。
而在尾部插入和删除操作上,std::vector的效率比std::list更高,因为std::vector的元素在内存中是连续存储的,可以直接在末尾添加或删除元素,不需要进行指针的改变。而std::list的元素在内存中是分散存储的,尾部插入和删除时需要遍历整个链表,效率较低。
因此,在选择容器时,需要考虑具体的操作场景,根据操作的特点选择合适的容器,以提高程序的效率。
阅读全文