草庐IT

std-ranges

全部标签

c++ - 传递给 std::sort 时,全局函数比仿函数或 lambda 慢

我做了一个小测试来检查全局函数/仿函数/lambda作为std::sort函数的比较器参数的性能。Functor和lambda具有相同的性能。我惊讶地发现,看起来是最简单回调的全局函数却慢得多。#include#include#include#include#include#include#include#include#includeusingnamespacestd;constintvector_size=100000;boolCompareFunction(conststring&s1,conststring&s2){returns1[0]v(vector_size);for(s

c++ - std::set 删除复杂性异常?

我试图找出从std::set中删除多个元素的复杂性。我正在使用thispage作为来源。它声称使用迭代器删除单个项目的复杂度是O(1)分摊的,但使用范围形式删除多个项目是log(c.size())+std::distance(first,last)(即-集合大小的日志+删除的元素数)。从表面上看,如果要删除的元素数(n)远小于集合中的元素数(m),这意味着循环遍历要删除的元素并一次删除它们时间更快(O(n))比一次调用删除它们(O(logm)假设n显然,如果真的是这样的话,第二种形式的内部实现只会执行上述循环。这是站点错误吗?规范中的错误?我只是错过了什么吗?谢谢,沙查尔

c++ - 将非英文字符串存储在 std::string 中

我在std::wstring中有一个简单的字符串std::wstringtempStr=_T("F:\\Projects\\Current_자동_\\Cam.xml");我想将这个字符串存储在std::string中。我试过下面的代码,但结果与输入的字符串不一样std::wstringtempStr=_T("F:\\Projects\\Current_자동_\\Cam.xml");//setupconvertertypedefstd::codecvt_utf8_utf16convert_type;std::wstring_convertconverter;//useconverter(

c++ - libpng 错误 : PNG unsigned integer out of range

当尝试从内存中读取PNG时,我遇到了这个奇怪的错误:libpngerror::PNGunsignedintegeroutofrange这个错误是由引起的png_read_info(png_ptr,info_ptr);它使用以下处理程序:staticvoidReadDataFromBuffer(png_structppng_ptr,png_bytepoutBytes,png_size_tbyteCountToRead){PNGDataPtrdataptr=(PNGDataPtr)png_get_io_ptr(png_ptr);png_uint_32i;coutlenpdataptr->l

c++ - std::atomic 访问是否作为内存屏障?

编译器能否对原子指令重新排序,或者原子指令是否充当内存屏障?再说一遍,写在原子指令之后的指令能在原子指令之前执行吗?请看下面的代码。如果useMapA=false在mapB更新和读取线程开始之前移动,我们将使用无效的mapB。注意:更新线程每15分钟才发生一次,因此我们有一个非常好的结构化流程,以及避免使用昂贵的锁定调用的方法!std::atomicuseMapA;std::mapmapA,mapB;publicvoidupdateMap(map*latestMap){if(useMapA){mapB=std::move(*latestMap);useMapA=false;}else{

c++ - 编译时模板 `std::integral_constant` 计数器 - 如何实现它?

我有几种类型,我想“绑定(bind)”一个std::integral_constant编译时每种类型的顺序ID值。例子:structType00{};structType01{};structType02{};structType03{};structTypeXX{};structTypeYY{};templatestructTypeInfo{usingId=std::integral_constant;};intmain(){cout::Id::value;//Shouldalwaysprint0cout::Id::value;//Shouldalwaysprint1cout::Id

【C++】详解用标准库的std::mt19937生成随机数

2023年8月16日,周三晚上写了1个半小时目录概述英文文档什么是mt19937什么是状态大小头文件std::mt19937的常用成员函数1.构造函数:2.种子操作函数:3.随机数生成函数:4.辅助函数:生成种子值方法1:使用std::random_device方法2:使用时间戳举例说明概述英文文档std::mersenne_twister_engine-cppreference.comhttps://cplusplus.com/reference/random/mt19937/什么是mt19937std::mt19937是C++标准库中的一个伪随机数生成器类,它实现了梅森旋转算法(Merse

c++ - 从 std::string 获取类型,C++

有一次我在面试中被问到一个问题。因此我有一个函数voidf(std::string),我调用一个函数作为这个f("int")。因此我的函数必须在其主体中创建一个本地intx。有没有办法从constchar*获取类型。我知道boost::mpl::vector确实解决了这类问题。谁能告诉我技术? 最佳答案 如果应该支持用户定义的类型,那么不提供显式映射是不可能的。但是对于内置类型,它是可以做到的。您可以为类型定义实现一个解析器,并将其与函数模板结合起来,以迭代方式构造类型。像这样:templatevoidparseType(std::

c++ - 在编译时捕获 std::function 分配

我只想允许在我的代码库中使用std::function,前提是它不进行任何分配。为此,我可以编写类似下面的函数,并且只用它来创建我的函数实例:templatestd::functionmakeFunction(Functorf){returnstd::function(std::allocator_arg,DummyAllocator(),f);}如果DummyAllocator在运行时被使用,它将在何处断言或抛出。理想情况下,我想在编译时捕获分配用例。即templatestd::functionmakeFunction(Functorf){static_assert(sizeneed

c++ - 从最多 X 个字符构造 std::string,在空字符处停止

我正在从文件中的结构中读取字符串,其中每个字符串都有固定长度,并带有'\0'填充。如果存储的字符串需要整个长度,它们不会以零结尾。我目前正在用这样的方式构造std::string://charMyString[1000];std::stringstdmystring(MyString,ARRAYSIZE(MyString));但是,这也会复制填充。我现在可以修剪字符串,但是是否有一种优雅而快速的方法来首先防止复制?速度比空间更重要,因为这是循环运行。 最佳答案 简单的解决方案是:先计算出正确的长度按照Dieter的建议使用strnl