草庐IT

std-ranges

全部标签

c++ - 是否有任何 std::set 实现不使用红黑树?

有没有人见过STL的实现,其中STL::set不是实现为红黑树?我问的原因是,在我的实验中,B树优于std::set(和其他红黑树实现)2到4倍,具体取决于值B.我很好奇,当似乎有更快的数据结构可用时,是否有令人信服的理由使用红黑树。 最佳答案 Google的一些人实际上构建了一个B-treebasedimplementationoftheC++standardlibrarycontainers.它们的性能似乎比标准二叉树实现要好得多。不过有一个问题。C++标准保证从映射或集合中删除元素只会使指向映射或集合中相同元素的其他迭代器无效

c++ - 为什么 std::list 有最大尺寸?

如果std::list是一个链表,那为什么要限制元素的数量?每个元素都是指向新节点的链接,您可以拥有多少个指针没有限制。 最佳答案 Ifstd::listisalinkedlistthenwhyistherealimitonhowmanyelementsyoucanhave?因为max_size()函数是所有标准容器的要求。Eachelementisalinktoanewnodeandthere'snolimitonhowmanypointersyoucanhave.是的:大小必须由size_type表示,因此限制是该类型的最大值。

c++ - 从 initializer_list 错误构造 std::map

我正在尝试创建一个类构造函数,它将接受一个初始化列表并用它初始化一个映射,如下所示:classTest{std::mapm_ints;public:Test(std::initializer_list>init):m_ints(init){}};但这会导致很长的错误消息,坦率地说,我不明白。我需要更改什么才能使这项工作正常进行? 最佳答案 声明std::initializer_list的模板参数具有类型std::pair这是一个演示程序#include#include#includeclassTest{std::mapm_ints;

c++ - 这个 std::decay 的实现是正确的吗

std::decay的这个实现是否正确?templateTDecayType(T);templatestructdecay{usingtype=decltype(DecayType(declval()));};我问是因为我遇到的一切都使用一些模板分支来小心地操纵类型,而这似乎只是按照定义行事。 最佳答案 形成这样的函数调用需要按值传递,这需要复制/移动构造函数。该实现不够通用。不过,这是std::decay的要点。 关于c++-这个std::decay的实现是正确的吗,我们在StackO

c# - c++ - 使用 std 命名空间和依赖项

在尝试熟悉C++及其概念时,我遇到了usingnamespacestd和#include我的简单代码如下#include"stdafx.h"#include"ConsoleApplication5.h"#includeintmain(){std::cout使用使用intellisense的VisualStudio2015Community显示cout使用以下内容std::ostreamstd::cout作为一名C#程序员,这让我有些困惑。这是:std::ostream作为返回类型而std::cout是传递的方法/参数还是std::ostream依赖于cout更新(在Archimared

c++ - 使用 std::function 包装函数对象

谁能帮我理解为什么下面的代码会导致错误?classA{public:float&operator()(){return_f;}private:float_f=1;}a;auto&foo(){std::functionfunc=a;returnfunc();}intmain(){std::cout错误:error:non-constlvaluereferencetotype'float'cannotbindtoatemporaryoftype'float'returnfunc();^~~~~~1errorgenerated.在这里,在operator()中,我返回了对_f的引用,因此,我

c++ - libstdc++ 的 std::vector<bool>::data 有什么作用?

根据标准,std::vector没有成员函数data().但是,以下代码片段可以使用带有libstdc++的最新GCC正常编译:#includeintmain(){std::vectorv;v.data();}如果我们尝试使用结果,结果返回类型是void.这是一些gcc扩展还是一个错误?如果前者为真,它有什么作用? 最佳答案 我的/usr/include/c++/4.8/bits/stl_bvector.h有://_GLIBCXX_RESOLVE_LIB_DEFECTS//DR464.Suggestionfornewmemberfu

c++ - std::vector 保留后 operator[] 上 msvc 和 gcc 之间的行为差​​异,哪个是对的?

Thissnippetofcode使用msvc(越界错误)惨遭失败,但似乎在gcc和clang上都能正常工作。什么是正确的行为?#include#includeintmain(){std::vectorv;v.reserve(10);for(inti=0;i 最佳答案 行为未定义。reserve只保留内存,不影响容器的大小。也许您想使用resize?std::vectorv;v.resize(10);for(inti=0;i虽然在这种情况下你可以写std::vectorv(10);for(inti=0;i或者,您可以将reserve

c++ - 如何在编译时检测 C++ 中的 std::reference_wrapper

假设我们有一些可变参数模板,需要以不同方式处理std::reference_wrapper参数。我们怎样才能做到这一点? 最佳答案 你可以做一个特征来判断一个类型是否是reference_wrappertemplatestructis_reference_wrapper:false_type{};templatestructis_reference_wrapper>:true_type{};然后你可以用它来消除歧义:templatevoiddo_stuff(T&&t,false_type){coutvoiddo_stuff(T&&r

c++ - std::merge 不适用于 std::async

我想在一个单独的线程中合并两个vectorintmain(){vectora(100);vectorb(100);vectorc(200);std::async(std::launch::async,std::merge,a.begin(),a.end(),b.begin(),b.end(),c.begin());}这不编译main.cpp:Infunction‘intmain()’:main.cpp:17:25:error:nomatchingfunctionforcallto‘async(std::launch,,std::vector::iterator,std::vector: