草庐IT

set_allocated

全部标签

c++ - 使用 set 检测重复项

我正在处理不应弹出两次的数据。如果是,它应该检测到它并调用一个函数来处理它。目前,我正在将一些数据推送到一个vector,在插入之前,它应该检查数据是否已包含在该vector中。目前,这不是很有效,例如for(inti=0;i我知道set是一种特殊的vector,它只允许唯一数据。是否有另一种方法来检测添加(或至少尝试添加)到set的重复数据? 最佳答案 首先让我们明确一点,集合不是一种特殊的vector。它是一种容器,与vector正交,恰好可以防止重复。您可以通过检查insert的返回值来检测重复项:if(my_set.inse

c++ - 如何使用 std::scoped_allocator_adapter?

据我了解,std::scoped_allocator_adapter提供一种控制机制,用于指定单独哪个分配器将由容器、其元素、其元素的元素等使用,假设元素本身是容器。也就是说,我无法理解std::scoped_allocator_adapter的语义.BjarneStroustrup在TheC++ProgrammingLanguage,section34.4.4,pg中提供了以下4个示例。1001(在接下来的问题中,我将它们称为Example-1、Example-2等。):Wehavefouralternativesforallocationofvectorsofstrings://v

c++ - cmake + xcode : error 'Build setting PRODUCT_NAME undefined'

我正在使用cmake2.8.3为xcode3.2.5生成一个C/C++项目文件;构建总体上很好,但每次生成xcode项目时我都必须手动设置“产品名称”(在Project/EditProjectSettings/Packaging中)。如果我未能设置此产品名称,xcode拒绝构建项目,并退出并报告以下错误:build设置PRODUCT_NAME未定义是否可以使用cmake设置这个值?还是不定义产品名称? 最佳答案 你试过这样的事情吗?set_target_properties(your_targetPROPERTIESXCODE_AT

c++ - 获取 std::bad_alloc 错误;如何交叉验证操作系统是否真的内存不足

我有一个C++程序/Linux,它在运行后2-3秒内开始在32GBRAM上出现错误std::badalloc(并由包装器调用者重新启动)。我真正关心的是解决这个问题,但我想一步一步地去建立我对这个问题的理解的信心。看起来系统无法为new请求分配内存(当操作系统内存不足时会发生这种情况)。当程序运行时,我在另一个终端上以尽可能小的间隔(1秒)运行sar命令,但我看到kbcached是~24GB内存。为什么操作系统无法释放缓存并使该内存可用于new请求?要么1秒时间太多(与程序运行的速度相比),要么我在这里做错了什么。基本上我想交叉验证并确定操作系统确实内存不足,因此无法分配内存,然后从这

C++11 unordered_set with std::owner_less-like hashing

我正在使用外部网络库,它返回一些表示打开的套接字的神奇结构,文档说当将它们插入STL容器时,应该使用std::owner_less比较它们。std::map,std::owner_less>sockets;但是我想改用unordered_map。我该怎么做?std::owner_less是一个比较器,它对HashMap毫无用处。挖掘源代码,MagicStructure似乎是std::shared_ptr的类型定义。 最佳答案 不幸的是,您似乎必须使用map,而对于这种情况不能使用unordered_map:http://wg21.c

c++ - malloc 和 allocate 有什么区别

我遇到了一些代码,它广泛使用了allocate。例如,char*recordDate=allocate(20)我以前从未使用过allocate,因此问题来了,malloc和allocate之间有什么区别?虽然我不清楚它的优势,但我可以说的一个区别是,malloc提供原始内存,而allocate似乎会提供原始内存,但我不必将指针强制转换为特定类型。 最佳答案 来自allocate文档:Allocatesn*sizeof(T)bytesofuninitializedstoragebycalling::operatornew(std::s

java - Eclipse 是否有 "vim: set ft=cpp:"或 "-*- c++ -*-"的等价物?

有时文件中的一些代码没有任何扩展名。此类文件将包含以单一语言编写的代码,但每个此类文件可能使用不同的语言(例如C、C++、汇编语言、wiki标记和HTML)编写。同样,当文件名中有共同的扩展名,但不同的文件使用不同的编程语言时,也会出现此问题。我要解决的问题是避免让每个checkout工作区的开发人员都不必弄清楚源文件是什么类型的文件(没有扩展名,或者扩展名不暗示源文件使用的语言)。为此,文件的作者有责任在文件中加入正确的魔法,以便正确打开文件。由于Eclipse能够根据文件中的某些嵌入文本禁用格式化程序,因此我认为也应该可以指定文件类型。OpenWith功能允许单个开发人员更改文件的

c++ - 无法将 std::unorded_set 与自定义 KeyEqual 进行比较

以下程序无法编译。但是如果我不注释掉operator==,它会编译。为什么在我已经提供了FooEqual的情况下仍然需要operator==#include#includestructFoo{};structFooHasher{size_toperator()(constFoo&)const{return1;}};structFooEqual{booloperator()(constFoo&lhs,constFoo&rhs)const{returntrue;}};//booloperator==(constFoo&lhs,constFoo&rhs){//returntrue;//}in

c++ std::bad_alloc on std::filesystem::path 追加

我遇到了一个非常奇怪的行为,我将其提炼为一个非常基本的测试:#include#includeintmain(void){conststd::stringname="foo";conststd::filesystem::pathlock_dir="/tmp";std::filesystem::pathlockfile=lock_dir/name;return0;}我用g++-std=c++17-Wall-Wextra-Werror-gfoo.cpp-ofoo编译它。当我运行它时,我在附加两条路径的行上得到一个std::bad_alloc异常。这是我用gdb看到的#0__GI_raise(

std::lower_bound 和 std::set::lower_bound 之间的 C++ 区别?

最近,在处理C++编程问题时,我遇到了一些有趣的事情。我的算法使用了一个非常大的集合,并且会在其上多次使用std::lower_bound。然而,在提交我的解决方案之后,与我在纸上所做的数学运算相反,以证明我的代码足够快,它最终变得太慢了。代码看起来像这样:usingnamespacestd;sets;intx;//codecodecodeset::iteratorit=lower_bound(s.begin(),s.end(),x);然而,在从friend那里得到使用set::lower_bound的提示后,所讨论的算法比以前运行得更快,而且它符合我的数学计算。改变后的二分查找:se