在stl中既有通用函数,又有相同成员函数主要表现在list中。
以remove为例
list<int> coll;
// insert elements from 6 to 1 and 1 to 6
for (int i=1; i<=6; ++i) {
coll.push_front(i);
coll.push_back(i);
}
// print all elements of the collection
cout << "pre: ";
copy (coll.cbegin(), coll.cend(), // source
ostream_iterator<int>(cout," ")); // destination
cout << endl;
// remove all elements with value 3
remove (coll.begin(), coll.end(), // range
3);
开始是list中的元素为6 5 4 3 2 1 1 2 3 4 5 6
remove之后变成6 5 4 2 1 2 4 5 6 5 6
remove算法具有linear complexity是将容器中的等于value的值得元素使用后续的元素进行替换,这就需要进行deference。因此只是调整元素的位置,而不是真正的删除。
函数返回的是A forward iterator addressing the new end position of the modified range, one past the final element of the
remnant sequence free of the specified value
然而在list中也提供了一个remove的成员函数,他是直接删除元素。它删除元素不需要移动元素,只需要进行相应的指针操作。因此具有更好的性能。
template <class _Tp, class _Alloc>
void list<_Tp, _Alloc>::remove(const _Tp& __value)
{
iterator __first = begin();
iterator __last = end();
while (__first != __last) {
iterator __next = __first;
++__next;
if (*__first == __value) erase(__first);
__first = __next;
}
}
所以在选择通用算法和成员函数时,比较具有good performance(具有constant or linear complexity)。
分享到:
相关推荐
通过模板,我们可以创建处理不同数据类型的通用算法和数据结构。STL正是基于这一特性构建起来的,它提供了大量的容器、迭代器和算法,极大地提高了开发效率和代码质量。 总之,掌握模板对于理解和使用STL至关重要。...
`ptr_fun`和`mem_fun`是函数对象适配器,它们将指针或成员函数转化为函数对象。 8. **内存管理**:STL容器通常负责其内部元素的内存管理,通过自动增长和收缩来调整容量。这使得开发者无需直接关注内存分配和释放,...
- **通用算法**:如`transform()`, `accumulate()`, `count()`, `min_element()`, `max_element()`等,提供了丰富的通用操作。 4. **函数对象(Functors)** - 函数对象是具有`operator()`的类,可以作为参数传递...
**C++ STL(Standard Template Library)是C++标准库的核心部分,它提供了高效且灵活的容器、算法和迭代器等工具,极大地提升了C++程序员的生产力。以下是对标题和描述中涉及的三个主要知识点的详细解释:** 1. **...
在C++ STL中,“算法”指的是将所有容器所使用的处理函数提炼并抽象成可复用的独立函数。这些算法剥离了“专为谁干”的功能,专注于“干什么”。STL中包含了大量的算法,如查找、排序、消除、计数等,总数超过70个...
C++ STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了高效且灵活的容器、迭代器、算法和函数对象。STL的主要目标是提高代码的重用性和效率,使程序员可以...
类模板的成员变量、成员函数等都可以使用类型参数。 - **通用版本的语法**: ```cpp template class ClassName { T member_variable; void member_function(T arg) { // 函数体 } }; ``` - **特化版本的...
在仿函数部分,你可以看到如何使用`std::greater`来实现降序排序,或者使用`std::mem_fun`将成员函数作为算法的参数。 总之,理解和掌握C++ API与STL API是提升C++编程能力的关键步骤。通过查阅`CppReference.chm`...
- C++11引入了更高效的`emplace`构造函数和`emplace_back`成员函数,以及右值引用和完美转发,增强了STL的性能和灵活性。 - C++17和C++20进一步扩展了STL,包括`if constexpr`、`fold expressions`、`std::...
C++ 的 Standard Template Library(STL)是一组经过优化的数据结构和算法的集合,它利用模板技术实现了一种泛型编程方式,极大地提高了代码的重用性和灵活性。STL 的核心组成部分包括容器、迭代器、算法、函数对象...
在"C++STL库开发文档"中,你可能会找到关于每个容器的详细信息,包括它们的构造函数、成员函数、操作方法以及与之相关的迭代器。例如,你可以查询vector的push_back()和pop_back()函数的参数和返回值,了解如何向...
标题中的“ini读取类,使用C++STL”指的是使用C++标准模板库(Standard Template Library, STL)来设计和实现一个能够读取和操作.ini配置文件的类。.ini文件是一种常见的文本配置文件格式,常用于存储软件的设置和...
6. 布尔谓词:STL中的谓词函数对象用于比较、测试和选择元素,如`bind1st`、`bind2nd`用于绑定函数对象的第一个或第二个参数,`mem_fun`、`mem_fun_ref`用于调用对象的成员函数。 7. 仿函数:仿函数是一种特殊的...
3. **函数对象(Functors)**:`functional`头文件包含了许多函数对象,如`greater`、`less`用于比较,`bind1st`、`bind2nd`用于绑定函数参数,以及`mem_fun`和`ptr_fun`用于成员函数和指针函数的操作。这些函数对象...
STL是C++库中的核心部分,它提供了一系列高效、可重用的容器、迭代器、算法和函数对象,极大地提升了C++程序员的生产力。 STL的主要组成部分包括: 1. 容器:容器是STL的核心,它们存储和管理元素集合。常见的容器...
类是创建对象的蓝图,其中包含了数据成员(属性)和成员函数(方法)。对象是类的实例,通过它们可以直接访问和操作类中的数据和行为。封装允许我们隐藏实现细节,提高代码的安全性和可维护性。继承则使得一个类可以...
C++ STL的主要组成部分包括容器、迭代器、算法和函数对象,这些组件使得C++在处理数据时具有高度的抽象性和通用性。 1. 容器:C++ STL中的容器是存储元素的对象,如vector(动态数组)、list(双向链表)、deque...
适配器如`std::bind`和`std::mem_fn`则可以将成员函数或非成员函数与对象结合使用。 在实际开发中,理解和掌握STL能够极大地提高C++程序的可读性、可维护性和运行效率。《C++ STL程序员开发指南》这本书可能还会...
9. 非成员函数友元:STL中的算法通常是非成员函数,这样可以避免因继承而带来的二义性问题,同时提高代码的可读性和可维护性。 10. 容器适配器:除了基本的容器外,STL还提供了一些适配器,如优先级队列(priority_...
- STL提供了大量通用算法,如排序(sort)、搜索(find)、复制(copy)、合并(merge)等,这些算法可以应用于任何满足要求的迭代器范围。 5. **内存管理(Allocator)** - STL容器使用分配器来管理内存,分配器...