我有一个项目中的一些代码似乎不起作用。
我正在尝试创建一个双端队列(结构体),它是类的静态成员。骨架/基本代码如下(我保留了所有数据类型 - my_typedef_fn 是通过 typedef-ing 函数指针获得的数据类型):
1.h文件:
class A {
struct Bstruct {
char * b_name;
my_typedef_fn b_func;
}
static std::deque<Bstruct> a_deque;
static void func();
}
Run Code Online (Sandbox Code Playgroud)
1.cpp文件:
std::deque<A::Bstruct> A::a_deque;
void A::func(char * name, my_typedef_fn fn) {
a_deque.push_front((Bstruct) {name, fn} ); // <<<< segfault !
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解 - .h 文件只是声明内容(像往常一样) - .cpp 中的第一行初始化静态成员 a_deque - 函数 func 使用 push_back 将内容添加到双端队列
但我在调用 push_front 的行出现分段错误(使用 gdb 发现了这一点)。
另外,当我在 push_front 之前打印 a_deque.size() 时,我在 SEGFAULT 之前得到 4294967264 当我使用 for 循环计算双端队列中的元素数量时:
int counter = 0 …Run Code Online (Sandbox Code Playgroud) 我知道它们两者之间的基本区别是 ConcurrentLinkedDeque 可以在多线程应用程序中使用。
任何人都可以给我一个实际的例子,如果错误使用它会如何影响应用程序的性能,在哪种情况下我应该使用 ConcurrentLinkedDeque 以及何时使用 ArrayDeque。
访问 deque[0]、deque[中间某处] 和 deque[-1] 的时间复杂度是多少?
正如标题所暗示的那样,我遇到了一个我的程序问题,我使用std :: list作为堆栈,并迭代列表中的所有元素.当名单变得非常大时,该计划花了太长时间.
有没有人对此有一个很好的解释?是一些堆栈/缓存行为?
(解决了问题,将列表更改为std :: vector和std :: deque(顺便说一下,这是一个惊人的数据结构),所有内容突然变得更快)
编辑:我不是一个傻瓜,我不访问列表中间的元素.我对列表做的唯一事情就是在结尾处开始删除/添加元素并迭代列表中的所有元素.而且我总是使用迭代器迭代列表.
使用http://www.cppreference.com/wiki/stl/deque/insert作为参考,我在某些位置将值插入到双端队列中.
例如,如果deque A是:
a, b, d, e, g
Run Code Online (Sandbox Code Playgroud)
使用指向d的迭代器,我可以:
A.insert(iter, c); // insert val c before loc iter
//deque is now a, b, c, d, e, g
Run Code Online (Sandbox Code Playgroud)
并且iter仍然指向d.但是,当iter指向g时,最后一个元素:
A.insert(iter, f);
//deque is now a, b, c, d, e, f, g
Run Code Online (Sandbox Code Playgroud)
但它现在指向f !!
我目前的解决方法是:
iter = A.insert(loc, val); // point iterator to element that was inserted before loc
iter++; // point iter back to loc
Run Code Online (Sandbox Code Playgroud)
我没有再测试过这个或者任何东西,花了这么多时间跟踪一个错误,只是为了发现插入()在所有地方的stl中的不一致行为很烦人.
与其他任何位置相比,为什么insert()在最后表现不同?还是我做错了什么?
我已经实现了一个简单的统计引擎,使用deque返回滚动均值和方差,以提供数据队列.
deque由许多条目构成,这些条目等于滚动值的数量.
当新值到达时,最前面的值会弹出前面,而新值会被推到后面.
我需要确保这不会在内存中增长,因为它预计会在很长一段时间内作为后台任务运行.
deque是否在使用中的堆上分配?有没有可用于修复尺寸的标志?
我在RHEL 5.3上使用G ++ 4.1.2
with open(logPath, 'r') as fh:
for line in TailDeque(fh, 20):
gamethread.delayed(0, show_recentlyCommands, (userid, text))
Run Code Online (Sandbox Code Playgroud)
我总是得到一个错误的行 with open(logPath, 'r') as fh:
我正在使用Python 2.5并使用TailDeque.
我在xcode中运行此代码.为什么我的编译器继续抱怨地图分配
#include <iostream>
#include <map>
#include <deque>
using namespace std;
map<int,deque<int>> bucket;
deque<int> A{3,2,1};
deque<int> B;
deque<int> C;
bucket[1] = A;//Warning "C++ requires a type specifier for all declaration
bucket[2] = B;//Warning "C++ requires a type specifier for all declaration
bucket[3] = C;//Warning "C++ requires a type specifier for all declaration
int main() {
for (auto it:bucket)
{
cout << it.first << "::";
for (auto di = it.second.begin(); di != it.second.end(); di++)
{
cout << "=>" << *di;
}
cout …Run Code Online (Sandbox Code Playgroud) 我想知道为什么C++有队列和堆栈,因为它已经有deque.
似乎堆栈/队列的运行时和使用deque来模拟堆栈/队列是相同的.此外,deque支持修饰符,如擦除,迭代器和随机访问,堆栈或队列都不支持.
那么为什么C++提供了所有这三个,因为deque比其他两个更强大?
谢谢!
deque ×10
c++ ×6
stl ×3
python ×2
arraydeque ×1
c# ×1
dictionary ×1
insert ×1
java ×1
list ×1
memory ×1
python-2.5 ×1
runtime ×1
std ×1