草庐IT

C++:为 std::sort 提供模板化比较函数

假设我想让std::sort根据指针指向的int值对指向int的指针vector进行排序。忽略那里明显的性能问题。简单吧?做一个函数:boolsort_helper(constint*a,constint*b){return*a并提供给std::sort。现在,如果我们还想对指向大对象的指针vector做同样的事情。同样的事情适用:首先我们定义一个对象中的运算符,然后按照以下几行创建一个函数:boolsort_helper(constob_type*a,constob_type*b){return*a或其他任何东西,将其提供给std::sort。现在,这就是它变得棘手的地方:如果我们想

c++ - 如何在 constexpr string_view 上使用 std::string_view::remove_prefix()

std::string_view::remove_prefix()和std::string_view::remove_suffix()都是c中的constexpr成员函数++17;但是,它们会修改调用它们的变量。如果值是constexpr,它也将是const并且不能修改,那么这些函数如何用于constexpr值?换句话说:constexprstd::string_viewa="asdf";a.remove_prefix(2);//compileerror-aisconst如何在constexprstd::string_view上使用这些函数?如果它们不能在constexprstd::s

c++ - C++ 中 "import std;"的用途

我在cppdepend上看到了以下一小段代码地点。importstd;//Moduleimportdirective.intmain(){std::cout那么,C++中importstd;的目的是什么?如何在C++中使用importstd;而不是usingnamespacestd;?我尝试在G++编译器中编译程序,但出现错误。 最佳答案 So,Whatisthepurposeofimportstd;C++?它的目的是使std模块中的名称可用。模块是一种语言功能,已被提议包含在未来的C++标准中。Howtouseimportstd;

c++ - 使用 std::for_each 遍历树

我对使用algorithm还很陌生和functional在C++中。我需要进行树遍历并为每个元素执行一个函数。请参阅下面的代码。这行得通,但我有一些我不喜欢的东西,也许可以做得更好。请注意,我仅限于相当旧的g++(4.4.7)版本,无法使用lambda函数。我使用包装函数do_walk和std::bind调用成员函数walk在每个元素上。有没有办法避开包装函数,直接调用成员函数?我为回调函数使用了typedefUnaryFunction.我更愿意使用walk的模板化版本.但是,当我更改代码以使用模板时,出现以下编译错误:error:nomatchingfunctionforcallto

c++ - std::any 的存储对象类型的可能性

在c++17中我们有std::any它将可变类型的对象存储在内存中。好的部分是我可以创建一个std::anyvector来模拟任意类型对象的容器。每当从容器中查询对象时,都会使用std::any_cast调用时使用完全相同的类型std::make_any创建任何对象。这是我如何实现这一目标的片段#include#include#include#include#includeintmain(){/*createsomeobjects*/std::setmySet={1,2,3};std::vectormyVec={3,4,5};std::unordered_map>myHash={std

c++ - MSVC std::pair 实现:SFINAE 是否在此处正确应用?

考虑以下std::pair的代码MicrosoftVisualStudio15.4.5附带的STL实现的默认构造函数:template::value&&is_default_constructible::value>>constexprpair():first(),second(){//defaultconstruct}我设置了/std:c++latest选项,所以,根据标准(我在这里使用草案n4659)我希望如果_Ty1中的任何一个,这个构造函数将被排除在重载决议之外。或_Ty1不是默认可构造的:23.4.2Classtemplatepair[pairs.pair]EXPLICITc

c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?

当你不想要它时,用零初始化一个vector不是浪费时间吗?我试试这段代码:#include#include#include#defineSIZE10intmain(){#ifdefVECTORstd::vectorarr(SIZE);#elsestd::arrayarr;#endif//VECTORfor(unsignedn:arr)printf("%i",n);printf("\n");return0;}我得到了输出:用vector$g++-std=c++11-DVECTORtest.cpp-otest&&./test0000000000用数组g++-std=c++11test.cp

c++ - C 风格数组与库接口(interface)的 std::array

我想编写一个带有提供读取功能的接口(interface)的库。C风格的数组容易出错,但允许传递任何大小的缓冲区。C++数组更安全,但强制使用大小来构造。//interface.h//C-stylearrayintread(std::uint8_t*buf,size_tlen);//C++arrayintread(std::array&buff)我怎样才能两全其美?我在考虑函数模板,但它对于库接口(interface)来说似乎不实用。templateintread(std::array&buf);编辑std::vector可能是一个很好的候选人,但如果我们考虑到char*和std::ar

c++ - 为什么没有类似于 std::string_view 的 view<T>

我知道std::string_view是对字符串的非拥有引用和std::string_view之间的主要区别和std::string是现在,为什么std::string_view不适用于其他类型?或者为什么这个实现只针对std::string?例如:如果我们有类似的generic_view其中T可以是任何类型,包括自定义类型。有了这个,而不是使用constT&作为函数参数,generic_view可以使用。以及std::string_view的其他优势将很有用,如分配、复制等。 最佳答案 C++20中有一个非拥有类型,用于任意对象的

c++ - 如何在 C++ 中导出具有返回类型 std::map 的函数

我在VisualC++中有一个DLL项目和一个CLR项目。DLL项目是导出std::map类型函数的项目。我将从我的CLR项目中调用该函数。从DLL项目,员工.h#ifdefSTAFFS_EXPORTS#defineSTAFFS_API__declspec(dllexport)#else#defineSTAFFS_API__declspec(dllimport)#endif#include#includenamespaceStaffs{//otherexportedfunctions....//extern"C"STAFFS_APIautoGetStaffMap()->std::map