草庐IT

c++ - 使用 utf8 格式的正则表达式过滤字符串

我正在尝试过滤转义特殊字符并将其转换为小写的字符串。例如:"Goodmorning!"转换为goodmorning。我一次将一个字符串传递给我的函数。我成功地过滤了我的英语字符串,但在传递母语字符串时遇到了问题。如果我想包含所有utf-8字符,我应该使用什么类型的正则表达式过滤器字符串?#include#include#include#includestd::stringprocess(std::strings){std::stringst;std::regexr(R"([^\W_]+(?:['_-][^\W_]+)*)");std::sregex_iteratori=std::sre

c++ - 使用 std::forward 而不是 std::move 来初始化对象有什么好处吗?

我有一个函数模板,它采用某种可调用类型的参数,并使用std::bind为原始可调用对象创建一个具有预定义参数值的新可调用对象。我用转发引用参数和std::forward编写了它,如下所示:templateautomake_example_caller(F&&f){returnstd::bind(std::forward(f),123,456,789);}cppreferencedocumentationforstd::bind表示绑定(bind)对象“包含一个由std::decay::type构造的std::forward(f)类型的成员对象”。由于std::bind将函数转发给它的内

C++ 字符串像人一样排序?

我想按照人类对它们进行排序的方式对字母数字字符串进行排序。即,“A2”出现在“A10”之前,“a”肯定出现在“Z”之前!有什么办法可以不用编写迷你解析器吗?理想情况下,它还会将“A1B1”放在“A1B10”之前。我看到问题"Natural(humanalpha-numeric)sortinMicrosoftSQL2005"有可能的答案,但它使用各种库函数,"SortingStringsforHumanswithIComparer"也是如此。.下面是一个当前失败的测试用例:#include#include#include#include#includetemplatestructLexi

c++ - 来自 std::chrono 的时钟在不同的内核上可以不同吗

我喜欢比较来自std::chrono::high_resolution_clock的time_point,它们是在处理器不同内核上运行的线程中测量的。是否会有显着差异,例如滞后或更快/更慢的时钟?标准规定了什么? 最佳答案 std时钟与处理器无关,事实上,大多数线程也没有。来自同一线程的两个时钟测量很可能在不同的内核上进行。关于与测量相关的超前和滞后——这与任何其他指令的执行没有什么不同;通常的管道等可能会产生影响,但我认为这不是有害的。如果它可能有害,您可能需要考虑其他工具来完成这项工作,例如一些专门的平台计时工具或某种特定于CP

c++ - 为什么二维 std::array 不能用两层列表初始化器初始化?

有人能帮我理解为什么我的编译器不能/不能推断出这个吗?(使用g++7.3)不起作用:#includestd::array,2>f(){return{{0,0},{0,0}};}工作正常:#includestd::array,2>f(){return{std::array{0,0},{0,0}};}同样奇怪的是,这也失败了:#includestd::array,2>f(){returnstd::array,2>{{0,0},{0,0}};}@1201ProgramAlarm指出添加另一组花括号是可行的:#includestd::array,2>f(){return{{{0,0},{0,0

c++ - 从 std::stringstream 读取 uint8_t 作为数字类型

我的理解是,从stringstream读取uint8_t是一个问题,因为stringstream将解释uint8_t作为char。我想知道如何从stringstream中读取uint8_t作为数字类型。比如下面的代码:#include#includeusingnamespacestd;intmain(){uint8_tui;std::stringstreamss("46");ss>>ui;cout打印出52。我希望它打印出46。编辑:另一种方法是从stringstream中读取一个string,然后将解决方案转换为uint8_t,但这破坏了nice链接属性。比如在我实际要写的代码中,经

c++ - 另一种复制算法

我有两个vector。vectorobjects;vectornames;这两个vector被填充并且具有相同的大小。我需要一些算法来对对象变量进行赋值。它可能正在使用boost::lambda。比方说:some_algoritm(objects.begin(),objects.end(),names.begin(),bind(&Object::Name,_1)=_2);有什么建议吗? 最佳答案 我认为您需要std::for_each因为每个Object实例都被就地修改:std::vector::const_iteratorname

c++ - 返回并自动推导 std::initializer_list

在以下内容中:autox={0};//autodeductionofstd::initializer_listautoy=[]()->std::initializer_list{return{0};}();//explicitautoz=[](){return{0};}();//won'tcompile为什么不能返回并自动推断std::initializer_list的类型? 最佳答案 好吧,因为标准是这么说的,而且因为braced-init-list不是表达式。根据C++11标准的第5.1.2/4段:[...]Ifalambda-

c++ - 在带有 std::unordered_map 的 std::scoped_allocator_adaptor 中使用自定义分配器

我正在尝试将一个简单的内存池分配器与std::unordered_map一起使用。我在std::string和std::vector中似乎成功地使用了同一个分配器。我希望unordered_map(和vector)中包含的项目也使用此分配器,因此我将我的分配器包装在std::scoped_allocator_adaptor中。简化定义集:templateusingmm_alloc=std::scoped_allocator_adaptor>;usingmm_string=std::basic_string,mm_alloc>;usingmm_vector=std::vector>;us

c++ - std::unordered_map 的哈希值

根据标准,std::hash中不支持容器(更不用说无序容器了)类(class)。所以我想知道如何实现它。我拥有的是:std::unordered_map_properties;std::wstring_class;我考虑过迭代条目,计算键和值的各个散列(通过std::hash)并以某种方式连接结果。执行此操作的好方法是什么?如果未定义map中的顺序,这有什么关系吗?注意:我不想使用boost。有人建议一个简单的异或,所以它会是这样的:size_tMyClass::GetHashCode(){std::hashstringHash;size_tmapHash=0;for(autoprop