stdlist相关内容
我有一个链表实现,我正在试验合并排序和快速排序算法. 我不明白为什么 std::list 中的排序操作如此之快.查看 linux 下的 std::list ,它似乎也是链表,而不是基于数组的列表. 我在这里尝试的合并排序与 Dave Gamble 的版本几乎相同:合并排序链接列表 另外,我想我会尝试基于此代码的简单快速排序:http://www.flipcode.com/arch
..
注意:这不是我应该“使用列表还是双端队列"的问题.面对insert(),这是一个关于迭代器有效性的问题. 这可能是一个简单的问题,我只是太密集了,看不到正确的方法.我正在实现(无论好坏)网络流量缓冲区作为 std::listbuf,并且我将当前的读取位置保持为迭代器 readpos. 当我添加数据时,我会做类似的事情 buf.insert(buf.end(), newda
..
我有一个 std::list>,我知道是按照std::string element排序的. 由于我想做很多基于 std::string 元素的 std::find_if,我相信 std::map 与 lower_bound 和 upper_bound 会更合适.
..
我有一些 C 代码,其中有两个链表(比如 A 和 B),A 被插入到 B 的特定位置,而 A 仍然有元素. 如何使用 C++ STL 有效地模拟相同的行为?如果我尝试拼接,它会使第二个为空. 谢谢,古库尔. 解决方案 您需要复制元素.考虑这样的事情: std::copy(a.begin(), a.end(), std::inserter(b, b_iterator)); 如
..
如何创建具有固定元素计数的std::list? 解决方案 #include // list with 5 elements, using default constructor const size_t fixedListSize(5); std::list mylist(fixedListSize); 如果您希望它始终只包含5个元素,则必须将其包装在Fa
..
我有一个有趣的作业,其中我有一个std::map的CTurist(上一个类)和unsigned变量.这是代码: class CTurist { protected: string tName; int age; public: CTurist() {}; CTurist(string name, int age2) { tName
..
我要实现的是包含std::functions的std::list.我正在尝试实现一个回调系统,在该系统中可以将函数添加到列表中,然后可以循环遍历列表并调用每个函数. 我在A类课上有以下内容: std::list> m_callbacks_forward; bool registerForward( std::function
..
我有一些C代码,其中有两个链接列表(例如A和B),并且A在特定位置插入到B中,而A仍然具有元素. 如何使用C ++ STL有效地模拟相同的行为?如果我尝试拼接,则会使第二个为空. 谢谢, Gokul. 解决方案 您需要复制元素.考虑这样的事情: std::copy(a.begin(), a.end(), std::inserter(b, b_iterator)); 如
..
std::list如何分配保留next/prev指针和其中包含的T元素的节点? 我认为标准分配器只能用于分配一种类型的内存(因为std::allocator::allocate以sizeof(T)的增量分配内存).因此,似乎不可能以单一分配方式分配列表节点和所包含的对象,这意味着必须根据实现决定,对节点进行分配,并且节点存储指向对象的指针,而不是对象本身,这意味着从指针到列表节点到它所包含的
..
检查此代码: #include "stdafx.h" #include int _tmain(int argc, _TCHAR* argv[]) { std::list mylist; mylist.push_back(1); std::list::iterator i = mylist.end(); if( i == my
..
我想知道是否有任何内置或完善的方式(即通过lambda)来遍历std :: list的元素并查找与给定值匹配的所有元素?我知道我可以遍历所有这些对象,但是我想问一问是否有办法让迭代器仅对符合给定条件的元素进行迭代?下面的示例仅向我提供了第一个匹配元素的迭代器. #include #include #include int main(
..
我有一个std::list >,我知道它是根据std::string element进行排序的. 由于我想基于std::string元素进行很多std::find_if的操作,因此我相信带有lower_bound和upper_bound的std::map会更合
..
在我的程序中,有一个指向std::list对象的指针,它的分配方式如下. d_list_p = new std::list(); 然后在我的程序中稍后将其删除. d_list_p->clear(); delete d_list_p; 由于某种原因,我在delete语句上触发了Windows断点.如果我在delete语句处中断,则会看到该列表存在且大小为0
..
我正在优化我的LRU缓存实现的常量因素,我使用 std :: unordered_map 来存储 :: iterator s到 std :: list ,即使在添加或删除附近元素时也保证有效。这导致O(n)运行时,所以,我正在追求常数因子。 我知道每个迭代器基本上都是指向保存我的结构的指针东西。目前,要将给定元素移动到链表的后面,我使用迭代器调用 l.erase(it),然后分配一个新对w
..
注意:这不是我应该“使用list还是deque”的问题。这是一个关于迭代器在 insert()面前的有效性的问题。 这可能是一个简单的问题而且我太过密集而无法看到正确的方法。我正在实现(无论好坏)网络流量缓冲区作为 std :: list buf ,我将我当前的读取位置保持为迭代器 readpos 。 当我添加数据时,我会执行类似 buf.insert(buf.e
..
我有一个Foo对象,和一个std ::列举它的实例。我的问题是,当我添加一个新的实例到列表,它首先调用ctor,但也调用dtor。然后在另一个实例上的dtor(根据this指针)。 单个实例被添加到列表,但是因为它的dtor 需要一些简化的代码来说明问题: #include #include class Foo { publ
..
我有一个 std :: list 中的几个元素。我必须输出像 std :: pair > 。对于int我只是直接添加int变量到对。有没有办法在一个语句打印列表,而不必使用迭代器? 解决方案 有什么办法打印列表一个语句,而不必使用interator。 确实是:如果在修改列表时,维护一个存储指向列表中每个元素的指针的
..
根据我的理解,std :: vector分配/解除分配它需要的所有内存,每次它的元素增长或收缩,因此指针算术可以用于迭代矢量元素。 std :: list另一方面使用双链表,每个元素指向下一个和上一个元素。 假设(可能是错误的)std :: list动态分配它的内存,所以内存被分配,如果需要的话,递增。如何std :: list仍然能够提供指针算术作为迭代它的元素的方法。 解决方
..
问题是使用 std :: list 以实现O(1)清除列表项的推荐方法是什么? 通常,当我选择一个双向链表时,我想要能够在O(1)时间内从列表中删除一个元素,然后在O(1)的时间内将它移动到不同的列表。如果元素有自己的 prev 和下一个指针,没有真正的窍门,完成工作。如果列表是双重链接的循环列表,则删除不一定需要知道包含该项目的列表。 根据
..
我有一个Foo对象,和一个std ::列举它的实例。我的问题是,当我添加一个新的实例到列表,它首先调用ctor,但也调用dtor。然后在另一个实例上的dtor(根据this指针)。 单个实例被添加到列表,但是因为它的dtor 需要一些简化的代码来说明问题: #include #include class Foo { publ
..