jjzjj

c++ - GCC 中优先队列的奇怪 shared_ptr 比较器选择

我有一个包含在std::shared_ptr中的类,我想在std::priority_queue的帮助下选择前k个对象.所以,我定义operator并期待一切都会好起来的。但事实并非如此。默认情况下(使用gcc)std::priority_queue使用默认比较器std::shared_ptr,比较地址。但是如果我对std::vector使用std::sort而没有指定比较器我的operator行为是不同的将会被使用。这有点出乎意料且不一致。代码示例:structdocument{floatrank;document(floatrank):rank(rank){}};usingdoc_

C++ 为成员容器中的项调用for_each中的成员函数

如果我有这样一个类(模仿一些STL的容器):classElem{public:voidprepare();//dosomethingon*this//...};classSelector{public:typedefvectorcontainer_type;typedefcontainer_type::iteratoriterator;iteratorbegin(){returncont_.begin();}iteratorend(){returncont_.end();}voidcheck_all();private:prepare_elem(Elem*p);//dosomethin

c++ - 在 C++ 中将矩阵高效分解为方形子矩阵

我通过使用1D数据类型并将其包装到行和列中,在C++中实现了Matrix数据类型。现在,我希望有可能从此时开始创建正方形/分块子矩阵,并且我想在内存中进行。问题是我希望这些子矩阵中的一些可以转移到GPU内存并可以在那里并行处理它们。例如,这对矩阵乘法很有用。由于这些子矩阵在主内存中没有对齐,如果不创建单独的拷贝,将它们作为一个单元复制到设备内存看起来是不可能的?我想让这个直接的GPU子矩阵复制映射到CPU原始矩阵以用于更新和效率目的。我事先不知道确切的分区。有人知道我怎样才能实现它吗?提醒一下,矩阵需要按block划分,而不是按行划分,这在C/C++中相对容易。

c++ - 为容器生成成员类型

当我定义自己的容器时,我必须提供十几种成员类型,例如:typedefT&reference;typedefconstT&const_reference;typedefT*iterator;typedefconstT*const_iterator;typedefstd::size_tsize_type;typedefstd::ptrdiff_tdifference_type;typedefTvalue_type;typedefT*pointer;typedefconstT*const_pointer;typedefstd::reverse_iteratorreverse_iterator

c++ - vector 结束迭代器

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:comparingiteratorsfromdifferentcontainers在实践中,std::vector::iterator可能被实现为一个包装T*在大多数STL实现中,每个迭代器都与一个唯一的内存地址相关联(假设迭代器来自非空vector)。但是,这是一个实现细节。C++标准是否有任何实际保证,即每个vector迭代器在某种程度上都是唯一的?具体来说,可以end()一个非空vector的迭代器永远等于end()另一个非空vector的迭代器?例如:std::vectorv1;std::vector

c++ - 在 MSVC 中导出模板真的有用吗?

当您在MSVC的公共(public)接口(interface)中创建包含模板化数据成员的结构时,您将在编译时收到警告。一种解决方案是在您的DLL中导出模板化类型(参见this知识库文章)。我问这个问题是因为我不知道为什么要导出该类型?如果不导出,.hpp文件有足够的信息自行生成类型。如果它是标准库类型,并且您有2个或更多dll,每个都可能链接到标准库的不同版本,那么您现在的代码中有多个相同类型的二进制版本。重点是什么?如果实际上存在编译器认为相同的两个不同版本,情况#1可能会在运行时导致崩溃,但#2可能只是由于缺少符号而无法加载?我在这里完全偏离基地了吗?在我看来,最好的选择是忽略来自

c++ - Eclipse[HELIOS] CDT : Autocomplete, STL 不能与 Eclipse 一起工作..帮助!

我是一个java用户,但想玩弄CPP,所以我为eclipse[HELIOS]安装了CDT插件。我在尝试正确配置它时遇到了一些问题,想知道是否有人可以帮助我。这是我们可以使用的简短代码:#include"Base.h"//Theselinesgiveerror=>Unresolvedinclusion:#include#includeusingnamespacestd;voidBase::ininitalizeVector(){for(inti=0;i1]自动完成功能不适用于STL。2]在我点击点“。”后,我无法获得支持的方法列表等。3]包含不起作用:#include4]我认为使用命名空

c++ - 通用等价于 std 函数对象

boost中是否有任何函数对象是std::equal_to、std::greater等函数对象家族的通用等价物?本质上,std::equal_to应该变成类似structgeneric_equal_to{templatebooloperator()(constT&t,constU&u)const{returnt==u;}};我可以看到由于返回类型的问题,std::plus等的通用版本可能会更加棘手(尽管decltype可以解决这个问题)。不过,我看不出std::equal_to函数对象本身需要模板参数的任何可能原因。这些版本肯定存在于boost或STL中的某个地方吗?当然,编写它们很简

c++ - 与 STL vector 对齐分配

我希望我的vector存储对齐(比如16字节边界),所以我将这个分配器作为memalign()的包装器,我想知道这是否是正确的方法分配用于STLvector的对齐内存。templateclassAlignedAllocator{public:...pointerallocate(size_typesize,const_pointer*hint=0){return(pointer)memalign(Alignment,size*sizeof(T));};voiddeallocate(pointerp,size_typesize){free(p);};...}如果没有,是否有适用于STL容

c++ - 如何将 STL 映射保存到文件 C++

我正在尝试使用map将数据安全地保存到文件中,但我不知道如何操作。我想将学生的姓名和年龄保存到文件中,然后当我查找学生的姓名时,它应该显示他们的年龄。#include#include#include#includeusingnamespacestd;classstudent{private:mapmap;public:voidstudents(stringname,intage);};voidstudents(stringname,intage){if(age>name;cout>age;//codetosavemaptofilefilemap.close();}