草庐IT

std-ranges

全部标签

c++ - 通过 && 在 std::vector push_back() 和 std::map operator[] 中获取参数

这个问题在这里已经有了答案:Whatismovesemantics?(11个答案)关闭9年前。我在std::vector::push_back()实现中发现了这个:voidpush_back(_Ty&&_Val){//somecodehere}这在std::mapoperator[]实现中:mapped_type&operator[](key_type&&_Keyval){//somecodehere}为什么_Val和_Keyval是按引用方式取的?通过引用引用的方式进行论证是如何工作的?与引用引用相比,这种方法有什么好处?附言这不是逻辑上的“与”,我明白这一点。

c++ - std::copy 的限制是否比 std::memcpy 更宽松?

与regardtothe问题copyvs.memcpyvsmemmove(这里的信息非常好,顺便说一句。),我一直在阅读,在我看来,这不像口语中所说的,例如cppreference注意:memcpy已更改为memmove,因为采用了此引用。--NotesInpractice,implementationsofstd::copyavoidmultipleassignmentsandusebulkcopyfunctionssuchasstd::memcpyifthevaluetypeisTriviallyCopyable--std::copy(也不是std::copy_backward)不

java - Java 库是否具有 C++ 中的 std::lower_bound() 、 std::upper_bound() 之类的函数?

这个问题在这里已经有了答案:Javaequivalentofc++equal_range(orlower_bound&upper_bound)(9个回答)关闭8年前。是否有任何其他替代方法可以在Java中实现相同的目的?在C++中,我可以使用这些美妙的方法,让我的生活更轻松。Java也可以吗?我的唯一目标是编写简单、干净且不易出错的代码。

c++ - std::bind 和 boost::bind 与多态性的区别

我有一个派生类,我从中绑定(bind)了一个我没有在这个类中重写的虚函数,所以我希望调用父类中的一个。它适用于boost(1.55),但如果我从C++11切换到std::bind,它会拒绝使用进行编译errorC2100:illegalindirection1>functional(1152):seereferencetofunctiontemplateinstantiation'_Rxstd::_Pmf_wrap::operator()(_Wrapper&)const'beingcompiled1>with1>[1>_Rx=bool,1>_Pmf_t=bool(__thiscallB

c++ - std::thread 并在 visual studio 2013 中 move

我有一个只能move的类和一个按值获取此类对象的函数。在新线程中调用函数:voidfoo(MyClassa){}intmain(){MyClassa;std::threadt(&foo,std::move(a));}我得到一个编译器错误,因为缺少MyClass的复制构造函数(我删除了他),如果我实现他,复制构造函数就会被调用。显然这是一个错误,它在gcc中编译时没有复制构造函数。有什么解决方法吗? 最佳答案 如果方法需要a的所有权,通过堆传递它,最好是在shared_ptr中:voidfoo(std::shared_ptra){}[

c++ - std::deque: "insertion and deletion of elements may invalidate iterators"是什么意思?

我正在阅读有关std::deque容器的信息,文档指出Insertionanddeletionofelementsinstd::dequemayinvalidateallitsiterators这是我对上述陈述的理解版本,如果我误解了陈述或遗漏了什么,请告诉我考虑以下代码std::deques;s.push_back(12);autoi=s.begin();s.push_front(45);//Afterpushing45atthebacknow`i`maybeinvalid.这个理解正确吗? 最佳答案 你是对的。例如之后std::

C++ 装饰器添加到 std::vector

我有一个记录的基类,想使用装饰器添加额外的字段和比较函数,并能够链接装饰器(记录可以有电子邮件,或出生日期,或两者都有,或没有).我也会有很多这样的装饰器;每个附加字段一个,及其比较功能。完成此操作后,我将使用基类指针将对象添加到vector中。代码如下:classBaseRecord{public:virtualboolCompare();//definedelsewhereprotected:std::stringm_strName;std::stringm_strAddress:};classBaseDecorator:publicBaseRecord{public:BaseDe

c++ - 错误:无法将 std::vector<std::basic_string<char>> 转换为 std::string*

作为C++的新手,我曾尝试在我的一个程序中创建一个简单的void函数以显示数组。但是,如标题所示,存在错误。我认为这是一个问题,因为我试图用与函数参数不同形式的数组来调用它。我不确定如何修改它。#include#includeusingnamespacestd;voiddisplay_array(stringarr[]){inti;for(i=0;ipaths;cout>current;while(current!="0"){paths.push_back(current);cin>>current;}display_array(paths);}感谢任何帮助。

c++ - 不能将 std::vector<T> 转换为 std::initializer_list<T> 吗?

我还以为有人可以做到这一点?然而,情况似乎并非如此。为什么?还是我做错了什么?#include#include#includeusingnamespacestd;voidfn(std::initializer_listi){for(intivalue:i){cout{4,5,6})return0;}demo我问这个的原因是因为我有一个带有初始化列表的类,我是从它派生的,但需要在将初始化列表传递给基类之前修改初始化列表。我怎样才能做到这一点? 最佳答案 有时旧的方法是最好的方法:只传入范围:voidfn(std::initialize

c++ - std::forward_list 和序列概念要求

标准委员会选择为std::forward_list实现API是否有某种原因使其不满足序列容器概念要求?Sequence概念要求指定容器必须与以下表达式兼容:c.insert(it,v);//insertatpositionc.insert(it,n,v);//fillinsertc.insert(it,begin,end);//insertrange...其中it是一个迭代器,v是一个元素,n是一个整数,begin/end是一个迭代器范围。这个API没有理由不能用于单链表,因为insert函数需要一个迭代器起始位置。但出于某种原因,std::forward_list具有insert_a