草庐IT

std-ranges

全部标签

c++ - 在哪里使用 std::move 来处理字符串?

我正在读这个post.我找到了以下代码。我在想:std::move对字符串有用吗(假设字符串足够长)?它是否使之前的字符串无效?我应该在什么地方使用它,在什么地方不应该使用它?.className{public:Name(std::stringfirstName,std::stringlastName):firstName_(std::move(firstName)),lastName_(std::move(lastName)){}voidprint()const{std::cout我的技术一直在使用constructor(conststd::string&argument):fiel

C++ std::stringstream 操作优化

我的情况如下:我有一个二进制文件,我正在使用std::fstream读取操作作为(char*)读取我的目标是从文件中取出每个字节,将其格式化为十六进制,然后将其附加到一个字符串变量中字符串变量应包含按照第2项格式化的文件的全部内容。例如,假设我有以下二进制文件内容:D0469857A0249956A3我格式化每个字节的方式如下:stringstreamfin;;for(size_ti=0;i(fileb[i]);}//thiswouldyieldtheoutput"D0469857A0249956A3"returnfin.str();上述方法按预期工作,但是,据我所知,它对于大文件来说

c++ - 指针和 std::string - 奇怪的行为 - C++

我提前道歉,因为我在之前的帖子中问过同样的问题,但正如有人正确指出的那样,我没有发布真正的代码。因此,我再次问同样的问题,试图比以前更清楚。作为练习,我正在创建一个操作字符串的程序。特别是,我想删除包含在2个“*”之间的部分字符串。我必须强调,我已经使用库字符串的函数成功地创建了相同的程序;事实上,问题涉及使用char指针对给定字符串的操作。我将发布完整的代码并进行深入讨论。#include#includeusingnamespacestd;intmain(){stringfrase;getline(cin,frase);//Takesasinputthephraseintsize=f

C++:替换我们有迭代器的 std::unordered_set 中的元素

我有一个指向某些对象的指针的std::unordered_set。该集合具有自定义哈希和等价函数,s.t.即使对象在“所有成员都相等”的意义上不相等,对象也可以关于集合是相等的。现在我想插入一个新对象。如果集合中已经存在等效对象,当且仅当对象的“其他”成员(即不属于散列/相等性检查的一部分)的某些条件为真时,我希望替换旧对象。如果我决定更换对象,我想知道如何最有效地做到这一点。我觉得整个过程应该可以通过一次HashMap查找来完成。我目前最好的方法是:首先,调用set.insert(new_object)。如果这实际上插入了对象,我们就完成了。(这需要我们进行一次HashMap查找。)

c++ - 为什么 std::put_money() 需要分钱?

我想知道为什么std::put_money()函数接受美分而不是美元。还有lookingatthedefinitiononcppreference,它没有说明输入数字应该是什么。无论使用何种货币,我们都必须使用该货币可能的最低十进制值的十进制数,这是真的吗?(即*1.0、*100.0或*1000.0视情况而定?)因为这似乎包含了对立货币的知识到当前语言环境... 最佳答案 一般的想法是您不想对货币使用float,因为小数位数有限的值在二进制中可能是周期性的,并且鉴于浮点值具有有限的精度,这会在求和时导致意外他们;通常的例子是#inc

c++ - 如何使用 boost-range 在函数中封装自定义迭代器

最近我使用boost-range来创建满足特定条件的元素的范围。在所有情况下,我一直使用相同类型的过滤范围,因此我试图将此行为封装在外部函数中。这就是我的问题开始的地方。考虑以下示例。#include#include#includeautomyFilter=[](conststd::vector&v,intr){returnv|boost::adaptors::filtered([&r](autov){returnv%r==0;});};intmain(intargc,constchar*argv[]){usingnamespaceboost::adaptors;std::vector

c++ - std::transform 以两个 std::vector 和一个常量作为参数

我想使用std::transform做一些类似于binary_op的事情,但有一个额外的常量,例如,得到两个vector的乘积:x1=(10,20,30,40,50)和x2=(2,4,6,8,10),我们可以写成:#include#include#includedoublemultiply(doublex,doubley){returnx*y;}intmain(){std::vectorx1;std::vectorx2;for(inti=1;i::iteratorit=x1.begin();it!=x1.end();++it)std::cout以上代码将按元素乘以x1和x2并返回(20

c++ - clang 编译的程序在 std::any_cast 期间抛出 std::bad_any_cast

我正在开发一个使用std::any的应用程序.最近我发现,当我用clang编译它时,我得到了bad_any_caststd::any_cast之一的异常我确定我正在转换为正确的类型。我添加了一些typeid(T).name()的转储至cout确保插入std::any的类型没有区别并输入我正在尝试转换到的内容。我试图编写简单的程序来演示它,但我无法重现它。值得一提的是:我正在传递一包std::any(每个内部包含不同的类型)并且只有一个有问题(它是std::map)。当我切换到boost::any时问题消失了(或者如果我使用gcc构建我的应用程序)。我已经深入了解std::any_cas

c++ - 如何在 C++ 中使用 std::bind 函数作为信号处理程序?

我正在使用以下代码将信号处理添加到我的C++类中:namespace{std::atomicsignal_flag(false);}voidterminate_or_interrupt_handler(intsignal){switch(signal){caseSIGTERM:WARN("SIGTERMreceived");signal_flag.store(true);break;caseSIGINT:WARN("SIGINTreceived");signal_flag.store(true);break;default:throw(std::runtime_error("Unhan

c++ - 如何隐藏 range-v3 的复杂范围类型?

我需要一个类,该类的方法可以使用range-v3库返回某种范围。为了实现这样一个类,我可以在该类的定义中正确地编写它的所有内容。例如:#include#include#includeclassAlpha{public:intx;};classBeta:publicAlpha{};classFoo{public:std::sets;autor(){returns|ranges::v3::view::transform([](Alpha*a){returnstatic_cast(a);})}};但是,在我的真实案例中,Foo::r函数非常复杂,我想隐藏它的实现。特别是,实现使用了一些额外的