草庐IT

STL-Like

全部标签

c++ - Qt:实现 "oscilloscope-like"实时绘图的最佳方式

我正在为Qt开发一个Gui模块来绘制实时测量值,就像在数字示波器中一样,基于Qwt.目前一切正常,但也许还有一些功能需要添加;-)此刻,数据按列存储在QVectors中,与一个全局时间引用QVector一起存储在一个单独的QObject中。因此,可以按行丢弃数据,只保留Meusurement到某个过去。所有QVectors始终具有相同的长度。然后可以在QwtPlot中按行按时间正确绘制完整数据。我想更多地封装数据存储,以便更独立于处理测量。因此,最好为每个测量添加一个单独的时间坐标列表,并将它们都放在一个单独的QObject中,它接受和传递数据。然后会有10或20个这样的QObject

c++ - 如何将 STL 容器作为参数传递给 BOOST_CHECK_EQUAL?

例如,假设我们有一个要测试的类:structTestMe{vectorgetSomething();}测试函数由:...vectorExpected;TestMeTM;...Result=TM.getSomething();BOOST_CHECK_EQUAL(Result,Expected);...STLvector提供了一个免费的运算符==,但它没有提供运算符 最佳答案 我认为您应该使用BOOST_CHECK_EQUAL_COLLECTIONS,这会测试每个元素并打印不匹配的位置:BOOST_CHECK_EQUAL_COLLECT

c++ - C/C++ 中的 STL、iostream、new、delete for CUDA

我可以在C/C++中为CUDA使用STL、iostream、new、delete吗? 最佳答案 如果您有Fermi级GPU(因此计算能力>=2.0),并且正在使用CUDA4.0或更高版本,那么new和delete都可以使用在设备代码中。不支持STL容器和算法以及iostream。如果您想对CUDA使用“类似STL”的操作,您可能会对Thrust感兴趣模板库。它允许主机代码使用容器类型透明地与GPU交互,并实现许多非常有用的数据并行原语,如排序、缩减和扫描。请注意,这仍然是主机端设备,不能在您自己的内核代码中使用Thrust及其容器。

c++ - STL优先级队列和指针重载

这是我第一次使用优先队列。我正在尝试为学校实现Dijkstra算法,我认为我需要一个最小堆来执行此操作。现在我的节点是指针,我想比较它们的权重,但我认为我不能用指针重载>和到目前为止的代码:priority_queue,node_comparison>minHeap;然后我有一个结构来比较节点的权重structnode_comparison{booloperatortotalWeighttotalWeight;}};但是它说这个运算符函数的参数太多了。一段时间以来,我一直在尝试弄清楚如何用我的节点管理一个最小堆优先级队列,但一直卡住。有什么想法吗? 最佳答案

c++ - 如何强制清除 STL 内存缓存?

我有一个类,它有一个unordered_map类型的字段。我在我的应用程序中创建了该对象的单个实例,它被包装在shared_ptr中。该对象非常耗费内存,我想在使用完后立即将其删除。然而,重置指针只是释放了对象占用的一小部分内存。如何强制程序释放对象占用的所有内存?以下模拟程序重现了我的问题。for循环打印垃圾只是为了让我有足够的时间观察top使用的内存。析构函数在reset()之后被调用。此外,紧接着,使用的内存从大约2GB下降到1.5GB。#include#include#includeusingnamespacestd;structA{~A(){cerrindex;};intma

C++ 简洁地检查 STL 容器中的项目(例如 vector )

boolxInItems=std::find(items.begin(),items.end(),x)!=items.end();是否有更简洁的方法来检查x是否在项目中?这似乎不必要地冗长(重复项目三次),这使得代码的意图有点难以阅读。比如有没有类似下面的东西:boolxInItems=boost::contains(items,x);如果不存在任何更简洁的boost/STL算法来检查集合是否包含项目,那么使用辅助函数来启用contains(items,x)?我是否使用了错误的STL容器?即使是std::set也会导致boolxInItems=items.find(x)!=items.

c++ - std::map::begin() 之前的 STL 迭代器

在C++11的std::map中,是否有一些有效的迭代器x使得++x保证等于map::开始()?我想检测我刚刚调用的函数(我的)是否已经将迭代器从函数的前面移开。该函数会将迭代器恰好向后移动一个位置。答案是否适用于图书馆的其他人? 最佳答案 不,std容器中开始之前的迭代器都是UB(反向迭代器除外,它可能无法解决您的问题)。您可能需要修复有问题的函数。如果做不到这一点,请将其包装起来并在调用它之前捕获不良行为。如果做不到这一点,您可以在map键类型排序中插入一个负无穷大元素,并添加一个标记值。如果做不到这一点,您可以编写迭代器适配器

c++ - 您是否必须在类似 STL 的类中实现多个迭代器?

我非常熟悉STL及其使用方法。我的问题是...如果我要实现自己的STL容器类型,如何定义内部迭代器?STL类往往具有顺序或随机访问迭代器、它们的const_版本和流迭代器。这些迭代器是否在每个STL类中都已完全定义,或者是否存在您从中继承的某种基类以获得大部分迭代器功能?有谁知道有关如何实现支持这些不同类型的迭代器的类的良好引用? 最佳答案 一般来说,你只需要实现iterator和const_iterator.如果需要反向迭代器,可以使用std::reverse_iterator的实例化.流迭代器将使用operator>>和oper

c++ - STL 中的比较器

我正在使用structminHeap生成一个使用priority_queue的最小堆。并且函数comp使用STL中给出的排序函数以相反的顺序打印数字。现在我的疑问是我不能在函数sort中使用structminHeap并且不能在priorityQueue中使用函数comp。感觉structminHeap和comp的功能差不多。请解释一下何时使用比较器的结构以及何时使用普通函数作为STL中的比较器?#include#include#include#includeusingnamespacestd;structminHeap{booloperator()(constinta,constint

c++ - 切换到C++11时,是否需要重新编译接口(interface)中使用STL的所有依赖库?

我正在尝试将一个大型项目切换为使用C++11。我遇到了大量链接器错误,这些错误似乎是由使用C++11编译的库和使用C++03编译的库之间的STL类上不匹配的命名空间引起的。例如,假设库B是A的依赖项。B具有以下模板化类作为其接口(interface)的一部分。templateclassVectorParameter{public:VectorParameter();virtual~VectorParameter();...}库A使用VectorParameter>实例化模板.当我用C++11重新编译A而没有重新编译B时,我遇到了链接器错误并提示LFE::VectorParameter>