C++大牛看看这个STL的编译问题

快乐田伯光 2011-12-15 04:15:49
#include <set>
#include <algorithm>
#include <iostream>
#include <iterator>

struct xxxy : public binary_function<int, int, bool>
{
bool operator() (int a, int b) const
{
return a == b;
}
};

int main(int argc, char *argv[])
{
set<int> set1, set2;
set<int>::iterator iter;

set1.insert(1);
set1.insert(2);
set1.insert(3);
set2.insert(1);
set2.insert(2);

set1.erase(remove_if(set1.begin(), set1.end(), bind2nd(xxxy(), 2)));

copy(set1.begin(), set1.end(), ostream_iterator<int>(cout, " "));

return 0;
}
...全文
202 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2011-12-15
  • 打赏
  • 举报
回复
您这样的需求应该使用vector 配合堆算法。
时间复杂度是一样的。
只是insert,erase时比较麻烦点。




int arr[] = {3,2,45,8,7,9};
std::vector<int> vec(arr,arr + 6);
std::make_heap(vec.begin(),vec.end());
std::sort_heap(vec.begin(),vec.end());

vec.erase(std::remove(vec.begin(),vec.end(),8),vec.end());//依然有序。
std::lower_bound(vec.begin(),vec.end(),3);//查找元素。

vec.insert(std::lower_bound(vec.begin(),vec.end(),4),4);//依然有序的插入




快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
上面删个2只是测试程序罢了,实际删的值是满足某一条件的,并不是相等的。
快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
各位,满足条件的在set内部并不一定是连续的, 所以remove_if算法用不了的话,只能自己去遍历加判断了
iamnobody 2011-12-15
  • 打赏
  • 举报
回复

set1.erase(set1.lower_bound(2),set1.upper_bound(4));//删除2 - 4区间内的元素。


这样能满足要求没?
qq120848369 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 guosha 的回复:]

这样不行啊,因为这里只是一个测试程序而已,
实际我是需要把符合条件的删除掉。 用find的话跟for(...)加判断差不多了
引用 8 楼 akirya 的回复:

C/C++ code
set1.erase( set1.find(2) );
就行了
[/Quote]

我说的还有点问题, set是不重复键值的, 不用循环erase, 就是find_if就行了。

或者直接set.erase(2)就行了。。。
快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qq120848369 的回复:]

不行的,remove_if是把符合if的都放到容器末尾,然后返回那一段应该被删除元素的第一个元素的迭代器。

但是set它NND是有序的容器,不是想挪就挪的,make的时候出错提示的挺靠谱的,就是set的键值是const的,不能对*iter1=*iter2这样做。

楼主应该用find_if,循环慢慢erase。
[/Quote]

只能这样喽,多谢!
iamnobody 2011-12-15
  • 打赏
  • 举报
回复
不能这么做的原因是用通用算法修改set中的值,会破坏红黑树的平衡。所以返回const_iterater。也就是说不能直接修改set中的值。只能删除再插入。查找应该用set::find();和set::remove等。
虽然我很奇怪他实现这个方法,但是,抢个分再说
快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
这样不行啊,因为这里只是一个测试程序而已,
实际我是需要把符合条件的删除掉。 用find的话跟for(...)加判断差不多了
[Quote=引用 8 楼 akirya 的回复:]

C/C++ code
set1.erase( set1.find(2) );
就行了
[/Quote]
qq120848369 2011-12-15
  • 打赏
  • 举报
回复
不行的,remove_if是把符合if的都放到容器末尾,然后返回那一段应该被删除元素的第一个元素的迭代器。

但是set它NND是有序的容器,不是想挪就挪的,make的时候出错提示的挺靠谱的,就是set的键值是const的,不能对*iter1=*iter2这样做。

楼主应该用find_if,循环慢慢erase。
  • 打赏
  • 举报
回复
set1.erase( set1.find(2) );
就行了
  • 打赏
  • 举报
回复
set的实现问题,gcc版的 set迭代器不允许赋值,VC 版的是允许赋值的。

而remove_if是需要对迭代器进行赋值。所以gcc下编译不通过。
快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pqpqr 的回复:]

。。。。。这个声明都不加
[/Quote]

你想说啥啊,帖代码忘贴了而已。如果你可以解决3楼的问题,送你100分,还接受你的不肖的眼神。
iamnobody 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 guosha 的回复:]
:!g++ d.cpp
/usr/include/c++/4.1.0/bits/stl_algo.h: In function ‘_OutputIterator std::remove_copy_if(_InputIterator, _InputIterator, _OutputIterator, _Predicate) [with _InputIterator = std::_Rb_tree_……
[/Quote]


我也觉得郁闷死了。。。竟然不合重载的规定。。。
  • 打赏
  • 举报
回复
。。。。。这个声明都不加
快乐田伯光 2011-12-15
  • 打赏
  • 举报
回复
:!g++ d.cpp
/usr/include/c++/4.1.0/bits/stl_algo.h: In function ‘_OutputIterator std::remove_copy_if(_InputIterator, _InputIterator, _OutputIterator, _Predicate) [with _InputIterator = std::_Rb_tree_const_iterator<int>, _OutputIterator = std::_Rb_tree_const_iterator<int>, _Predicate = std::binder2nd<xxxy>]’:
/usr/include/c++/4.1.0/bits/stl_algo.h:1291: instantiated from ‘_ForwardIterator std::remove_if(_ForwardIterator, _ForwardIterator, _Predicate) [with _ForwardIterator = std::_Rb_tree_const_iterator<int>, _Predicate = std::binder2nd<xxxy>]’
d.cpp:35: instantiated from here
/usr/include/c++/4.1.0/bits/stl_algo.h:1218: error: assignment of read-only location

shell returned 1

有using namespace std的,忘帖了
ouyh12345 2011-12-15
  • 打赏
  • 举报
回复
加了后,在我的vs2008上编译通过
ouyh12345 2011-12-15
  • 打赏
  • 举报
回复
没有
using namespace std;
庖丁解牛(侯捷自序) i 目录 v 前言 xvii 本书定位 xvii 合适的读者 xviii 最佳阅读方式 xviii 我所选择的剖析对象 xix 各章主题 xx 编译工具 xx 中英术语的运用风格 xxi 英文术语采用原则 xxii 版面字形风格 xxiii 源码形式与下载 xxiv 在线服务 xxvi 推荐读物 xxvi 第1章 stl 概论与版本简介001 1.1 stl 概论 001 1.1.1 stl的历史 003 1.1.2 stlc++ 标准程序库 003 . 1.2 stl 六大组件 - 功能与运用 004 1.3 gnu源码开放精神 007 1.4 hp stl实现版本 009 1.5 p.j. plauger stl实现版本 010 1.6 rouge wave stl实现版本 011 1.7 stlport 实现版本 012 1.8 sgi stl实现版本 总览 013 1.8.1 gnu c++ header 文件分布 014 1.8.2 sgi stl 文件分布与简介 016 stl 标准头文件(无扩展名) 017 c++ 标准规格定案前,hp规范的stl头文件(扩展名 .h) 017 sgi stl 内部文件(sgi stl真正实现于此) 018 1.8.3 sgi stl 的组态设定(configuration) 019 1.9可能令你困惑的c++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5:class template partial specialization 028 组态6:function template partial order 028 组态7:explicit function template arguments 029 组态8:member templates 029 组态10:default template argument depend on previous template parameters 030 组态11:non-type template parameters 031 组态:bound friend template function 032 组态:class template explicit specialization 034 1.9.2 临时对象的产生与运用 036 1.9.3 静态常数整数成员在class 内部直接初始化 037 in-class static const integral data member initialization 1.9.4 increment/decrement/dereference 运算子 037 1.9.5 "前闭后开"区间表示法 [ ) 039 1.9.6 function call运算子(operator()) 040 第2章 空间配置器(allocator) 043 2.1 空间配置器的标准接口 043 2.1.1 设计一个简单的空间配置器,jj::allocator 044 2.2 具备次配置力(sub-allocation)的sgi 空间配置器 047 2.2.1 sgi 标准的空间配置器,std::allocator 047 2.2.2 sgi 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() 051 2.2.4 空间的配置与释放,std::alloc 053 2.2.5 第一级配置器 __malloc_alloc_template 剖析 056 2.2.6 第二级配置器 __default_alloc_template剖析 059 2.2.7 空间配置函数allocate() 062 2.2.8 空间释放函数deallocate() 064 2.2.9 重新充填free-lists 065 2.2.10 内存池(memory pool) 066 2.3 内存基本处理工具 070 2.3.1 uninitialized_copy 070 2.3.2 uninitialized_fill 071 2.3.3 uninitialized_fill_n 071 第3章 迭代器(iterators)概念与 traits 编程技法 079 3.1 迭代器设计思维 - stl关键所在 079 3.2 迭代器是一种 smart pointer 080 3.3 迭代器相应型别(associated types) 084 3.4 traits 编程技法 - stl源码门钥 085 partial specialzation(偏特化)的意义 086 3.4.1 迭代器相应型别之一value_type 090 3.4.2 迭代器相应型别之二difference_type 090 3.4.3 迭代器相应型别之三pointer_type 091 3.4.4 迭代器相应型别之四reference_type 091 3.4.5 迭代器相应型别之五iterator_category 092 以advanced() 为例 093 消除 "单纯传递调用函数" 097 以distance() 为例 098 3.5 std::iterator class 的保证 099 3.6 iterator相关源码完整重列 101 3.7 sgi stl的私房菜:__type_traits 103 第4章 序列式容器(sequence containers) 113 4.1 容器概观与分类 113 4.1.1 序列式容器(sequence containers) 114 4.2 vector 115 4.2.1 vector 概述 115 4.2.2 vector 定义摘要 115 4.2.3 vector 的迭代器 117 4.2.4 vector 的数据结构 118 4.2.5 vector 的构造与内存管理:constructor, push_back 119 4.2.6 vector 的元素操作:pop_back, erase, clear, insert 123 4.3 list 128 4.3.1 list 概述 128 4.3.2 list 的节点(node) 129 4.3.3 list 的迭代器 129 4.3.4 list 的数据结构 131 4.3.5 list 的构造与内存管理:constructor, push_back, insert 132 4.3.6 list 的元素操作:push_front, push_back, erase, pop_front, 136 pop_back, clear, remove, unique, splice, merge, reverse, sort 4.4 deque 143 4.4.1 deque 概述 143 4.4.2 deque 的中控器 144 4.4.3 deque 的迭代器 146 4.4.4 deque 的数据结构 150 4.4.5 deque 的构造与内存管理 :ctor, push_back, push_front 152 4.4.6 deque 的元素操作:pop_back, pop_front, clear, erase, insert 161 4.5 stack 167 4.5.1 stack 概述 167 4.5.2 stack 定义式完整列表 167 4.5.3 stack 没有迭代器 168 4.5.4 以list 做为stack 的底层容器 168 4.6 queue 169 4.6.1 queue 概述 169 4.6.2 queue 定义式完整列表 170 4.6.3 queue 没有迭代器 171 4.6.4 以list 做为queue 的底层容器 171 4.7 heap(隐式表述,implicit representation) 172 4.7.1 heap 概述 172 4.7.2 heap 算法 174 push_heap 174 pop_heap 176 sort_heap 178 make_heap 180 4.7.3 heap 没有迭代器 181 4.7.4 heap 测试实例 181 4.8 priority-queue 183 4.8.1 priority-queue 概述 183 4.8.2 priority-queue 定义式完整列表 183 4.8.3 priority-queue 没有迭代器 185 4.8.4 priority-queue 测试实例 185 4.9 slist 186 4.9.1 slist 概述 186 4.9.2 slist 的节点 186 4.9.3 slist 的迭代器 188 4.9.4 slist 的数据结构 190 4.9.5 slist 的元素操作 191 第5章 关联式容器(associated containers) 197 5.1 树的导览 199 5.1.1 二元搜寻树(binary search tree) 200 5.1.2 平衡二元搜寻树(balanced binary search tree) 203 5.1.3 avl tree(adelson-velskii-landis tree) 203 5.1.4 单旋转(single rotation) 205 5.1.5 双旋转(double rotation) 206 5.2 rb-tree(红黑树) 208 5.2.1 插入节点 209 5.2.2 一个由上而下的程序 212 5.2.3 rb-tree 的节点设计 213 5.2.4 rb-tree 的迭代器 214 5.2.5 rb-tree 的数据结构 218 5.2.6 rb-tree 的构造与内存管理 221 5.2.7 rb-tree 的元素操作 223 元素插入动作 insert_equal 223 元素插入动作 insert_unique 224 真正的插入执行程序 __insert 224 调整rb-tree(旋转及改变颜色) 225 元素的搜寻 find 229 5.3 set 233 5.4 map 237 5.5 multiset 245 5.6 multimap 246 5.7 hashtable 247 5.7.1 hashtable 概述 247 线性探测(linear probing) 249 二次探测(quadratic probing) 251 分离链(separate chaining) 253 5.7.2 hashtable 的桶子(buckets)与节点(nodes) 253 5.7.3 hashtable 的迭代器 254 5.7.4 hashtable 的数据结构 256 5.7.5 hashtable 的构造与内存管理 258 插入动作(insert)与表格重整(resize) 259 判知元素的落脚处(bkt_num) 262 复制(copy_from)和整体删除(clear) 263 5.7.6 hashtable 运用实例(find, count) 264 5.7.7 hash functions 268 5.8 hash_set 270 5.9 hash_map 275 5.10 hash_multiset 279 5.11 hash_multimap 282 第6章 算法(algorithms) 285 6.1 算法概观 285 6.1.1 算法分析与复杂度表示 o( ) 286 6.1.2 stl算法总览 288 6.1.3 mutating algorithms - 会改变操作对象之值 291 6.1.4 nonmutating algorithms - 不改变操作对象之值 292 6.1.5 stl算法的一般形式 292 6.2 算法的泛化过程 294 6.3 数值算法 [stl_numeric.h] 298 6.3.1 运用实例 298 6.3.2 accumulate 299 6.3.3 adjacent_difference 300 6.3.4 inner_product 301 6.3.5 partial_sum 303 6.3.6 power 304 6.3.7 itoa 305 6.4 基本算法 [stl_algobase.h] 305 6.4.1 运用实例 305 6.4.2 equal 307 fill 308 fill_n 308 iter_swap 309 lexicographical_compare 310 max, min 312 mismatch 313 swap 314 6.4.3 copy,强化效率无所不用其极 314 6.4.4 copy_backward 326 6.5 set 相关算法(应用于有序区间) 328 6.5.1 set_union 331 6.5.2 set_intersection 333 6.5.3 set_difference 334 6.5.4 set_symmetric_difference 336 6.6 heap算法:make_heap, pop_heap, push_heap, sort_heap 338 6.7 其它算法 338 6.7.1 单纯的数据处理 338 adjacent_find 343 count 344 count_if 344 find 345 find_if 345 find_end 345 find_first_of 348 for_each 348 generate 349 generate_n 349 includes (应用于有序区间) 349 max_element 352 merge (应用于有序区间) 352 min_element 354 partition 354 remove 357 remove_copy 357 remove_if 357 remove_copy_if 358 replace 359 replace_copy 359 replace_if 359 replace_copy_if 360 reverse 360 reverse_copy 361 rotate 361 rotate_copy 365 search 365 search_n 366 swap_ranges 369 transform 369 unique 370 unique_copy 371 6.7.2 lower_bound (应用于有序区间) 375 6.7.3 upper_bound (应用于有序区间) 377 6.7.4 binary_search (应用于有序区间) 379 6.7.5 next_permutation 380 6.7.6 prev_permutation 382 6.7.7 random_shuffle 383 6.7.8 partial_sort / partial_sort_copy 386 6.7.9 sort 389 6.7.10 equal_range(应用于有序区间) 400 6.7.11 inplace_merge(应用于有序区间) 403 6.7.12 nth_element 409 6.7.13 merge sort 411 第7章 仿函数(functor,另名 函数对象function objects) 413 7.1 仿函数(functor)概观 413 7.2 可配接(adaptable)的关键 415 7.2.1 unary_function 416 7.2.2 binary_function 417 7.3 算术类(arithmetic)仿函数 418 plus, minus, multiplies, divides, modulus, negate, identity_element 7.4 关系类(relational)仿函数 420 equal_to, not_equal_to, greater, greater_equal, less, less_equal 7.5 逻辑运算类(logical)仿函数 422 logical_and, logical_or, logical_not 7.6 证同(identity)、选择(select)、投射(project) 423 identity, select1st, select2nd, project1st, project2nd 第8章 配接器(adapter) 425 8.1 配接器之概观与分类 425 8.1.1 应用于容器,container adapters 425 8.1.2 应用于迭代器,iterator adapters 425 运用实例 427 8.1.3 应用于仿函数,functor adapters 428 运用实例 429 8.2 container adapters 434 8.2.1 stack 434 8.2.2 queue 434 8.3 iterator adapters 435 8.3.1 insert iterators 435 8.3.2 reverse iterators 437 8.3.3 stream iterators (istream_iterator, ostream_iterator) 442 8.4 function adapters 448 8.4.1 对传回值进行逻辑否定:not1, not2 450 8.4.2 对参数进行系结(绑定):bind1st, bind2nd 451 8.4.3 用于函数合成:compose1, compose2(未纳入标准) 453 8.4.4 用于函数指针:ptr_fun 454 8.4.5 用于成员函数指针:mem_fun, mem_fun_ref 456 附录a 参考资料与推荐读物(bibliography) 461 附录b 侯捷网站简介 471 附录c stlport 的移植经验(by 孟岩) 473 borland c++builder 5 474 microsoft visual c++ 6.0 477 索引 481
内容简介回到顶部↑这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将看到底层的memory pool 和高阶抽象的traits 机制的实现。那些数据结构、那些算法、那些重要观念、那些编程实务中最重要最根本的珍宝,那些蜇伏已久彷佛已经还给老师的记忆,将重新在你的脑中闪闪发光。 目录回到顶部↑庖丁解牛(侯捷自序) i 目录 v 前言 xvii 本书定位 xvii 合适的读者 xviii 最佳阅读方式 xviii 我所选择的剖析对象 xix 各章主题 xx 编译工具 xx 中英术语的运用风格 xxi 英文术语采用原则 xxii 版面字形风格 xxiii 源码形式与下载 xxiv 在线服务 xxvi 推荐读物 xxvi 第1章 STL 概论与版本简介001 1.1 STL 概论 001 1.1.1 STL的历史 003 1.1.2 STLC++ 标准程序库 003 . 1.2 STL 六大组件 - 功能与运用 004 1.3 GNU源码开放精神 007 1.4 HP STL实现版本 009 1.5 P.J. Plauger STL实现版本 010 1.6 Rouge Wave STL实现版本 011 1.7 STLport 实现版本 012 1.8 SGI STL实现版本 总览 013 1.8.1 GNU C++ header 文件分布 014 1.8.2 SGI STL 文件分布与简介 016 STL 标准头文件(无扩展名) 017 C++ 标准规格定案前,HP规范的STL头文件(扩展名 .h) 017 SGI STL 内部文件(SGI STL真正实现于此) 018 1.8.3 SGI STL 的组态设定(configuration) 019 1.9可能令你困惑的C++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5:class template partial specialization 028 组态6:function template partial order 028 组态7:explicit function template arguments 029 组态8:member templates 029 组态10:default template argument depend on previous template parameters 030 组态11:non-type template parameters 031 组态:bound friend template function 032 组态:class template explicit specialization 034 1.9.2 临时对象的产生与运用 036 1.9.3 静态常数整数成员在class 内部直接初始化 037 in-class static const integral data member initialization 1.9.4 increment/decrement/dereference 运算子 037 1.9.5 "前闭后开"区间表示法 [ ) 039 1.9.6 function call运算子(operator()) 040 第2章 空间配置器(allocator) 043 2.1 空间配置器的标准接口 043 2.1.1 设计一个简单的空间配置器,JJ::allocator 044 2.2 具备次配置力(sub-allocation)的SGI 空间配置器 047 2.2.1 SGI 标准的空间配置器,std::allocator 047 2.2.2 SGI 特殊的空间配置器,std::alloc 049 2.2.3 构造和析构基本工具:construct() 和 destroy() 051 2.2.4 空间的配置与释
内容简介   本书是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、k-d树和配对堆等。本书适合作为计算机相关专业本科生的数据结构课程和研究生算法分析课程的教材。本科生的数据结构课程可以使用本书第1章~第9章,多学时课程还可以讲解第10章;研究生算法分析课程可以使用第6章~第12章。 推荐   本书是数据结构和算法分析的经典教材,书中使用主流的程序设计语言C++作为具体的实现语言。书的内容包括表、栈、队列、树、散列表、优先队列、排序、不相交集算法、图论算法、算法分析、算法设计、摊还分析、查找树算法、k-d树和配对堆等。本书适合作为计算机相关专业本科生的数据结构课程和研究生算法分析课程的教材。本科生的数据结构课程可以使用本书第1章~第9章,多学时课程还可以讲解第10章;研究生算法分析课程可以使用第6章~第12章。 作者简介   Mark Allen Weiss,1987年在普林斯顿大学获得计算机科学博士学位,师从著名算法大师Robert Sedgewick,现任美国佛罗里达国际大学计算与信息科学学院教授。他曾经担任全美AP(Advanced Placement)考试计算机学科委员会的主席(2000-2004)。他的主要研究方向是数据结构,算法和教育学。 图书目录 第1章 引论   1.1 本书讨论的内容   1.2 数学知识复习    1.2.1 指数    1.2.2 对数    1.2.3 级数    1.2.4 模运算    1.2.5 证明方法   1.3 递归的简单介绍   1.4 C++类    1.4.1 基本class语法    1.4.2 特别的构造函数语法与访问函数    1.4.3 接口与实现的分离    1.4.4 vector和string   1.5 C++细节    1.5.1 指针    1.5.2 参数传递    1.5.3 返回值传递    1.5.4 引用变量    1.5.5 三大函数:析构函数、复制构造函数和operator=    1.5.6 C风格的数组和字符串   1.6 模板    1.6.1 函数模板    1.6.2 类模板    1.6.3 Object、Comparable和例子    1.6.4 函数对象    1.6.5 类模板的分离编译   1.7 使用矩阵    1.7.1 数据成员、构造函数和基本访问函数    1.7.2 operator[]    1.7.3 析构函数、复制赋值和复制构造函数   小结   练习   参考文献  第2章 算法分析   2.1 数学基础   2.2 模型   2.3 要分析的问题   2.4 运行时间计算    2.4.1 一个简单的例子    2.4.2 一般法则    2.4.3 最大子序列和问题的解    2.4.4 运行时间中的对数    2.4.5 检验你的分析    2.4.6 分析结果的准确性    小结   练习   参考文献  第3章 表、栈和队列   3.1 抽象数据类型(ADT)   3.2 表ADT    3.2.1 表的简单数组实现    3.2.2 简单链表   3.3 STL中的向量和表    3.3.1 迭代器    3.3.2 示例:对表使用erase    3.3.3 const_iterator   3.4 向量的实现   3.5 表的实现   3.6 栈ADT    3.6.1 栈模型    3.6.2 栈的实现    3.6.3 应用   3.7 队列ADT    3.7.1 队列模型    3.7.2 队列的数组实现    3.7.3 队列的应用    小结   练习  第4章 树   4.1 预备知识    4.1.1 树的实现    4.1.2 树的遍历及应用   4.2 二叉树    4.2.1 实现    4.2.2 一个例子——表达式树   4.3 查找树ADT——二叉查找树    4.3.1 contains    4.3.2 findMin和findMax    4.3.3 insert    4.3.4 remove    4.3.5 析构函数和复制赋值操作符    4.3.6 平均情况分析   4.4 AVL树    4.4.1 单旋转    4.4.2 双旋转   4.5 伸展树    4.5.1 一个简单的想法(不能直接使用)    4.5.2 伸展   4.6 树的遍历   4.7 B树   4.8 标准库中的set和map    4.8.1 set    4.8.2 map    4.8.3 set和map的实现    4.8.4 使用几个map的例子    小结   练习   参考文献  第5章 散列   5.1 基本思想   5.2 散列函数   5.3 分离链接法   5.4 不使用链表的散列表    5.4.1 线性探测    5.4.2 平方探测    5.4.3 双散列   5.5 再散列   5.6 标准库中的散列表   5.7 可扩散列    小结   练习   参考文献  第6章 优先队列(堆)   6.1 模型   6.2 一些简单的实现   6.3 二叉堆    6.3.1 结构性质    6.3.2 堆序性质    6.3.3 基本的堆操作    6.3.4 堆的其他操作   6.4 优先队列的应用    6.4.1 选择问题    6.4.2 事件模拟   6.5 d堆   6.6 左式堆    6.6.1 左式堆性质    6.6.2 左式堆操作   6.7 斜堆   6.8 二项队列    6.8.1 二项队列结构    6.8.2 二项队列操作    6.8.3 二项队列的实现   6.9 标准库中的优先队列   小结    练习   参考文献  第7章 排序   7.1 预备知识   7.2 插入排序    7.2.1 算法    7.2.2 插入排序的STL实现    7.2.3 插入排序的分析   7.3 一些简单排序算法的下界   7.4 谢尔排序   7.5 堆排序   7.6 归并排序   7.7 快速排序    7.7.1 选取枢纽元    7.7.2 分割策略    7.7.3 小数组    7.7.4 实际的快速排序例程    7.7.5 快速排序的分析    7.7.6 选择问题的线性期望时间算法   7.8 间接排序    7.8.1 vector<Comparable*>不运行    7.8.2 智能指针类    7.8.3 重载operator<    7.8.4 使用“*”解引用指针    7.8.5 重载类型转换操作符    7.8.6 随处可见的隐式类型转换    7.8.7 双向隐式类型转换会导致歧义    7.8.8 指针减法是合法的   7.9 排序算法的一般下界   7.10 桶排序   7.11 外部排序    7.11.1 为什么需要新算法    7.11.2 外部排序模型    7.11.3 简单算法    7.11.4 多路合并    7.11.5 多相合并    7.11.6 替换选择   小结   练习   参考文献  第8章 不相交集类   8.1 等价关系    8.2 动态等价性问题   8.3 基本数据结构   8.4 灵巧求并算法   8.5 路径压缩   8.6 按秩求并和路径压缩的最坏情形   8.7 一个应用   小结   练习   参考文献  第9章 图论算法   9.1 若干定义   9.2 拓扑排序   9.3 最短路径算法    9.3.1 无权最短路径    9.3.2 Dijkstra算法    9.3.3 具有负边值的图    9.3.4 无环图    9.3.5 所有顶点对的最短路径    9.3.6 最短路径举例   9.4 网络流问题   9.5 最小生成树    9.5.1 Prim算法    9.5.2 Kruskal算法   9.6 深度优先搜索的应用    9.6.1 无向图    9.6.2 双连通性    9.6.3 欧拉回路    9.6.4 有向图    9.6.5 查找强分支   9.7 NP完全性介绍    9.7.1 难与易    9.7.2 NP类    9.7.3 NP完全问题    小结   练习   参考文献  第10章 算法设计技巧   10.1 贪心算法    10.1.1 一个简单的调度问题    10.1.2 赫夫曼编码    10.1.3 近似装箱问题   10.2 分治算法    10.2.1 分治算法的运行时间    10.2.2 最近点问题    10.2.3 选择问题    10.2.4 一些算术问题的理论改进   10.3 动态规划    10.3.1 用表代替递归    10.3.2 矩阵乘法的顺序安排    10.3.3 最优二叉查找树    10.3.4 所有点对最短路径   10.4 随机化算法    10.4.1 随机数生成器    10.4.2 跳跃表    10.4.3 素性测试   10.5 回溯算法    10.5.1 公路收费点重建问题    10.5.2 博弈   小结   练习   参考文献  第11章 摊还分析   第12章 高级数据结构及其实现

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧