草庐IT

c++ - i + 1 < vec.size() 和 i < vec.size() - 1 之间的区别

在编程时我发现我的代码在使用条件i时出现运行时错误但对i+1工作正常.这里vec是一个空的std::vector.//givingerrorvectorvec;for(inti=0;ivec;for(inti=0;i+1 最佳答案 std::vector::size方法返回一个未签名的std::size_t。因此,如果它为空,您将得到0-1,但表示为无符号数,根据two'scomplement,它将下溢并变为18446744073709551615. 关于c++-i+1 h

c++ - vector<auto> 是不允许的吗? (错误 : invalid use of ‘auto’ )

我有:#include#includeusingnamespacestd;intmain(){autoa=-SOME_CONST_MAX;vectormyVec{a,a,a,a};}我不知道SOME_CONST_MAX的类型但我想制作一个-SOME_CONST_MAX类型的vector.我假设vector会起作用,因为它会从a的类型推导出来.我正在运行这些错误:g++-std=c++14main.cppmain.cpp:9:9:error:invaliduseof‘auto’vectormyVec{a,a,a,a};^main.cpp:9:13:error:templateargume

c++ - 多变量结构的 '<' 的首选实现

最初这可能看起来过于抽象或哲学化,但我真的很想看看是否有人有令人信服的论据支持一种实现方式优于另一种实现方式。给定operator对于std::pair,这将是更好的实现:returnx.first或:returnx.first我的理解是这两种实现产生的结果相同。后者是否是首选,因为它仅根据operator定义?或者假设一个小于可比较的类型也应该是相等可比较的是合理的吗?有没有其他人看到另一点会在两者之间摇摆你?当然,任何答案都应该是通用的和可扩展的。那么你会使用哪一个,为什么?是否有比上述更好的不同实现方式? 最佳答案 假定对于任

c++ - 为什么我必须调用 operator<< 作为 SFINAE 使用 void_t 的方法?

我正在尝试定义一个has_ostream_operatorSFINAE测试,用于检查我是否可以计算出给定的类型。我让它工作,但前提是在我对has_ostream_operator的定义中我调用operator作为一种方法而不是作为中缀运算符。换句话说,这是可行的:decltype(std::declval().operator()))>这不是:decltype(std::declval()())>下面的测试用例(也可以在http://coliru.stacked-crooked.com/a/d257d9d6e0f3f6d9看到)。请注意,我包含了void_t的定义,因为我只使用C++1

c++ - 根据长度对集合 <string> 进行排序

我的问题与this有关.我想借助作为谓词的lambda表达式对set执行sort()操作。我的代码是#include#include#include#includeintmain(){usingnamespacestd;strings="abc";setresults;do{for(intn=1;nbool{size_talength=a.length();size_tblength=b.length();return(alength::const_iteratorx=results.begin();x!=results.end();++x){cout但是错误的数量和类型是如此复杂,以

c++ - 用继承和多态重载 '<<'?

以下是代码的粗略示例,问题是我如何让DerivedOne和DerivedTwo具有重载的至于我想达到什么;我希望能够遍历对象vector并在DerivedOne和DerivedTwo中输出我告诉它的信息。vectorobjects;classBase{private:objectDatapublic:objectgetData(){returnData;}};classDerivedOne:publicBase{}classDerivedTwo:publicBase{}现在我知道有这个,但它对我的目的不起作用。friendostream&operator 最

c++ - T::iterator 出错,其中模板参数 T 可能是 vector<int> 或 list<int>

我正在尝试编写一个函数来打印常见STL容器(vector、列表等)的表示。我给了函数一个模板参数T,例如,它可能代表vector。我在获取T类型的迭代器时遇到问题。vectorv(10,0);repr>(v);...templatevoidrepr(constT&v){cout...brett@brett-laptop:~/Desktop/stl$g++-Wallmain.cppmain.cpp:Infunction‘voidrepr(constT&)’:main.cpp:13:error:expected‘;’before‘i’main.cpp:14:error:‘i’wasnotd

c++ - 和有什么区别! ( x < y ) 和 x >= y 在 C++ 中?

通过EASTL,我偶然发现了一行特殊的代码。以下链接显示了感兴趣的行号为1870的文件。https://github.com/paulhodge/EASTL/blob/master/include/EASTL/algorithm.h那一行的代码是if(!(value.评论说“我们总是用写这样的比较有任何好处吗(也许是我忽略的某些上下文)?如果不是,为什么EASTL的作者故意用这种特殊的方式写它,甚至还特意评论它?一致性是唯一的原因吗? 最佳答案 意思是你只需要提供和==对于容器值类型。这也意味着您减少了这些类型的可变性(因为所有算法

c++ - std::string 或 std::vector<char> 保存原始数据

我希望这个问题适用于stackoverflow...将原始数据字节(8位)存储在std::string中有什么区别?而不是将它们存储在std::vector中.我正在从文件中读取二进制数据并将这些原始字节存储在std::string中.这很好用,这样做没有问题。我的程序按预期工作。但是,其他程序员更喜欢std::vector方法并建议我停止使用std::string因为它对原始字节不安全。所以我想知道为什么使用std::string可能不安全保存原始数据字节?我知道std::string最常用于存储ASCII文本,但是一个字节就是一个字节,所以我不明白std::vector的偏好.感谢

c++ - 从列表中删除重复项<int>

(尽可能多地)使用STL算法,例如remove_if()和list::erase,是否有一种很好的方法可以从定义如下的列表中删除重复项:listl;请注意list::unique()只有在连续元素中发生重复时才有效。就我而言,无论重复项在列表中的位置如何,都必须删除所有重复项。此外,删除重复意味着在最终结果中只保留每个元素的一个拷贝。编辑:l.sort()的选项其次是l.unique()不能使用,因为这会破坏列表的顺序。 最佳答案 使用list::remove_if成员函数、临时哈希集和lambda表达式。std::listl;st