草庐IT

list::sort 的 C++ 自定义比较函数

您好,我在编译一段简单的代码时遇到了问题。我正在创建一个实现一副纸牌的类,我想使用list::short方法创建一个洗牌方法。相关代码:deck.h#ifndef_DECK_H#define_DECK_H#include#include#include"Card.h"#include"RandomGenerator.h"usingnamespacestd;classDeck{private:staticconstintCARD_NUMBER=Card::CARDS_PER_SUIT*Card::SUIT_NUMBER;list*cards;RandomGeneratorrg;publi

c++ - std::list、std::vector 方法和 malloc()

在中断处理程序下使用STL:list和STL::vector类型我想避免调用malloc()。问题:防止在STL列表和vector中调用malloc()的最佳方法是什么?创建具有预定义大小的结构然后避免push/pop/erase调用就足够了吗?提前致谢 最佳答案 std::list和std::vector等STL容器具有接受Allocator类型的构造函数。通过提供您自己的分配器而不是使用默认分配器,您可以控制容器分配内存的方式。这个选项很少使用,但是在实时环境中使用你自己的分配器是一个很好的例子,说明了这个特性在哪里有用(并证明

c++ - 使用 C++11 Lambda 函数更改 vector(list, deque...) 中的所有元素

我有以下代码:#include#include#includeintmain(intargc,char*argv[]){std::vectorobj;obj.push_back(10);obj.push_back(20);obj.push_back(30);std::for_each(obj.begin(),obj.end(),[](intx){returnx+2;});for(int&v:obj)std::cout结果是:10、20、30我想使用新C++11标准的Lambda函数更改vector(obj)中的所有元素。这是for_each函数的实现代码:templateFunctio

c++ - 在 initializer_list 中使用临时变量会导致访问错误

这个问题在这里已经有了答案:Doubledeleteininitializer_listvs2013(1个回答)关闭8年前。我正在尝试使用initializer_list来实例化一个类,但出现了连线错误。当尝试使用以下方法创建`ClassB``变量时:ClassBb={{1,{}},{2,{}};将发生内存访问冲突。但是,如果更改为:ClassAa0,a1;ClassBb={{1,a0},{2,a1}};错误消失。我尝试使用VC2013(没有更新1)和gcc-c++4.8.1进行编译。使用gcc-c++4.8.1不会产生任何运行时错误。是VC的bug吗?谁能帮忙确认一下?谢谢!以下是S

c++ - 在键上使用 gpg --list-packets 的输出来获取 mpi 值以生成 s 表达式

我正在尝试使用gpg生成的公钥使用libgcrypt进行加密。我在key上使用了listpackets命令来获取key的内容,并将mpi值解析为一个s表达式。因此,当我尝试使用我的公钥对我的sessionkey进行编码时,我收到错误消息“S表达式中的奇数十六进制数”?我认为列表数据包可能会给我没有前导零的十六进制数字?如果是这样,我需要做什么才能获得可以在libgcrypt中使用的mpi值? 最佳答案 经过gpg和libgcrypt邮件列表的反复试验和建议后,listpackets命令会截断mpi值中的前导零,因此您必须在mpi值前

c++ - 编译器如何传递 `std::initializer_list` 值? (或 : how can I get around a universal overload with one? )

Continuingmysaga,我意识到我可以使用单个std::initializer_list参数来重载我的访问函数:classarray_md{//...my_type&operator[](size_typei){/*Lotsofcode*/}my_typeconst&operator[](size_typei)const{/*sameLotsofcode,with"const"sprinkledin*/}my_type&operator[](std::initializer_listi){/*Lotsofdifferentcode*/}my_typeconst&operato

c++ - 如何跟踪列表的更改

我有一个不可变的基本项目列表,我想对其执行多种操作:编辑、添加、删除、读取。实际操作将排队并在其他地方执行(发送到服务器,然后将发送一个新列表),但我想要表示当前操作集应用于基本列表时列表的外观。我当前的实现保留了一个范围vector及其映射到的位置。因此,未经编辑的列表具有从0到直接映射到基本列表的长度的一个范围。如果在索引5中执行添加,那么我们有3个范围:0-4映射到基本列表0-4。5映射到新项目,6-(length+1)映射到5-length。这是有效的,但是随着大量的添加和删除,读取会降级为O(n)。我曾考虑过使用散列图,但插入和删除可能发生的范围变化带来了挑战。是否有某种方法

C++ 复制构造函数被调用而不是 initializer_list<>

基于这段代码structFoo{Foo(){coutilist){cout输出是:默认构造函数抄袭者抄袭者在第三种情况下,我将b放入应该调用initializer_list构造函数的大括号初始化中。相反,复制构造函数带头。你们有人能告诉我这是如何工作的吗?为什么? 最佳答案 正如NicolBolas所指出的,此答案的原始版本是不正确的:撰写本文时的cppreference错误地记录了在列表初始化中考虑构造函数的顺序。以下是使用标准n4140草案中存在的规则的答案,该标准非常接近官方C++14标准。原答案的文字仍然包含在内,以备记录。

c++ - 在 std::list 中合并(将两个项目融合在一起,用融合替换它们)项目的算法(即破坏性聚类)

抱歉,如果这很明显,我是C++的新手。stackoverflow上似乎有相关的答案,只是我所理解的不足以适用于我的情况。我有一个代表视觉补丁的类实例列表。当特征之间的距离低于阈值时,我想合并这些项目,用合并后的输出替换parent。像这样:使用嵌套for循环遍历所有项目(将每个项目与其他所有项目进行比较)当找到匹配项时(不是同一个实例):从匹配对构造一个新的(子)实例,附加到新列表。从列表中删除两个(父)项继续遍历列表以查找其他匹配项将新列表附加到原始列表。我知道如何使用迭代器在单个for循环中从列表中删除项目,但我不清楚它如何在嵌套循环中工作,因为erase()递增到下一个项目。我可

c++ - 链接错误与 C++ 模板类和在单独的头文件中定义的嵌套类

对于我的C++类(class)作业,我必须创建一个链表数据结构。我现在有两个类。List类(这是一个模板类)和Link类。Link类嵌套在List类中,但是,我试图在单独的头文件中定义它。我遇到的问题是因为我对链接过程的工作原理缺乏了解。这是我的。List.h的内容#ifndef_LIST_H_#define_LIST_H_templateclassList{protected:classLink;public:List():_head(nullptr){}~List(){}voidPushFront(Tobject){//!!Attention!!//WhenIuncommentth