相关疑难解决方法(0)

迭代器失效规则

C++容器的迭代器失效规则是什么?

优选地以摘要列表格式.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ iterator c++-faq c++11 c++17

509
推荐指数
6
解决办法
11万
查看次数

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

什么是STL的双端队列?

我正在查看STL容器并试图弄清楚它们到底是什么(即使用的数据结构),并且deque阻止了我:我起初认为它是一个双链表,它允许从两端插入和删除恒定时间,但我对运营商[]在恒定时间内做出的承诺感到不安.在链表中,任意访问应该是O(n),对吗?

如果它是一个动态数组,它如何在恒定时间内添加元素?应该提到的是,可能会发生重新分配,并且O(1)是一个摊销成本,就像向量一样.

所以我想知道这个结构允许在恒定时间内任意访问,同时永远不需要移动到一个新的更大的地方.

c++ stl deque

173
推荐指数
7
解决办法
6万
查看次数

为什么push_back或push_front使deque的迭代器无效?

正如标题所要求的那样.

我对双端队列的理解是它分配了"块".我没有看到如何分配更多的空间使迭代器无效,如果有的话,人们会认为deque的迭代器比矢量更有保证,而不是更少.

c++ iterator stl deque

25
推荐指数
4
解决办法
4808
查看次数

C++:vector和list之间的混合:类似于std :: rope?

当存储一堆物品而我不需要随机访问容器时,我使用的std::list是一个很好的.但是,有时候(特别是当我只是将条目推回到后面并且从不删除中间的某个地方时),我希望我有一些具有更好性能的结构来添加条目.

std::vector 是坏事,因为:

  • 如果它不再适合,它必须重新分配.
  • 它并不适用于大量数据(因为你不能总是获得非常大的连续空闲内存).

std::list 是坏事,因为:

  • 它在每个push_back上进行分配.这很慢并导致大量内存碎片.

所以,介于两者之间的是我想要的东西.

基本上,我想要类似std::list< boost::array<T, 100> >左右的东西.或者也许代替100,让它成为4096/sizeof(T).也许std::list< std::vector<T> >并且第一个矢量可以很小,然后可以进一步增长.实际上我想隐藏在使用中,所以我可以做一个mycontainer.push_back(x).

std::rope 有点类似,但标准中没有.

在Boost中有这样的东西吗?

c++ arrays boost stl vector

6
推荐指数
1
解决办法
811
查看次数

为什么STL双端队列没有实现为圆形向量?

我一直认为在C++标准模板库(STL)中,双端队列(deque)是一个带有圆形边界条件的大小可变数组(如矢量),这意味着有一个头指针i和一个尾指针j都指向某些数组的位置a[0..L-1].push_front是i--,push_back是j++,pop_front是i++,pop_back是j--.当指针ij到达L或者-1,它再次出现在数组的另一端(0L-1分别).如果数组大小耗尽(i==j插入新元素后的指针),则会将原始大小加倍的较大空间重新分配给a[]数据,并将数据复制到向量中.O(1)考虑到圆形边界条件,还有随机访问的时间.但有人告诉我,在STL双端队列中,实际上有一个指针阵列指向许多固定长度的数组段.它比圆形矢量复杂得多.不使用简单的圆形向量来实现双端队列的功能有什么好处?随机访问会变慢吗?

c++ stl deque

5
推荐指数
2
解决办法
1083
查看次数

标签 统计

c++ ×6

stl ×5

deque ×3

c++-faq ×2

iterator ×2

arrays ×1

boost ×1

c++-standard-library ×1

c++11 ×1

c++17 ×1

std ×1

vector ×1