草庐IT

working-copy

全部标签

c++ - 函数参数 : Copy or pointer?

我是C++的新手,有一些问题,这就是其中之一。当你使用一个接受一个或多个参数的函数时,你知道这些参数在函数调用之前总是存储在一个变量中,是否有任何原因传递变量的拷贝,而不是指针到变量?我说的是性能。在我看来,传递整个结构的拷贝比仅仅传递一个指针(4字节)需要更多的资源。 最佳答案 有几种方法可以使传递拷贝比传递指针成本更低。对象等于或小于指针。直接访问值总是比取消引用指针更快。该结构足够小,可以由编译器放入堆栈。在这种情况下,对结构中值的访问是通过索引寻址模式而不是间接索引寻址模式完成的。前者通常更快。想要传递拷贝而不是引用还有其他

c++ - 如何将 map 中的 copy_if 复制到 vector ?

我想从map复制匹配谓词(相等整数)的值到vector.这是我尝试过的:#include#include#includeintmain(){std::vectorv;std::mapm;m["1"]=1;m["2"]=2;m["3"]=3;m["4"]=4;m["5"]=5;std::copy_if(m.begin(),m.end(),v.begin(),[](conststd::pair&it){return(0==(it.second%2));});}g++4.6.1的错误信息是:error:cannotconvert'std::pair,int>'to'int'inassignm

从HumanEval到CoderEval: 你的代码生成模型真的work吗?

本文分享自华为云社区《从HumanEval到CoderEval:你的代码生成模型真的work吗?》,作者:华为云软件分析Lab。本文主要介绍了一个名为CoderEval的代码生成大模型评估基准,并对三个代码生成模型(CodeGen、PanGu-Coder和ChatGPT)在该基准上的表现进行了评估和比较。研究人员从真实的开源项目中的选取了代码生成任务来构建CoderEval,并根据对外部依赖的程度为标准将这些任务分为6个等级、根据生成的目标分为3类生成任务,以更多维地评估不同大模型在不同上下文场景中的生成效果。实验结果表明,这三个模型在生成自包含函数方面的效果明显优于其他任务,但实际项目中的函

c++ - 空范围的 std::copy() 或 std::move() 是否需要有效目的地?

下面代码中的std::move()在VisualStudio2013(使用Debug配置)中编译时发出运行时警告,因为它检测到dest是一个空指针。但是,源范围是空的,因此永远不应访问dest。C++标准可能不清楚这是否应该被允许?它声明:要求:结果不得在[first,last]范围内。nullptr似乎可以满足该要求。#include#includeintmain(){std::vectorvec;int*dest=nullptr;//Therange[begin(vec),end(vec))isempty,sodestshouldneverbeaccessed.//However,

c++ - 不同类型的 copy_if

如果我知道如何提取匹配类型,是否有一种现代方式来表达有条件地从不同类型的源容器复制到目标容器的意图?将问题作为代码示例提出更容易:#include#includestructFoo{};structFooBar{boolis_valid;Foofoo;};std::vectorget_valid_foos(conststd::vector&foobars){std::vectorvalid_foos;for(constauto&fbar:foobars){if(fbar.is_valid)valid_foos.push_back(fbar.foo);}returnvalid_foos;

c++ - copy-and-swap 习语的低效率?

我正在测试一些代码,其中类中有一个std::vector数据成员。该类既可复制又可移动,operator=的实现方式如here所述。使用copy-and-swap习语。如果有两个vector,比如v1大容量,v2小容量,v2被复制到v1(v1=v2),赋值后保留v1中的大容量;这是有道理的,因为接下来的v1.push_back()调用不必强制进行新的重新分配(换句话说:释放已经可用的内存,然后重新分配它以增加vector没有多大意义).但是,如果对以vector为数据成员的类进行相同的赋值,则行为不同,并且在赋值之后更大的容量是不保留。如果copy-and-swap惯用语不被使用,复制

c++ - 为什么 `std::copy` 在我的测试程序中从 char 缓冲区读取一个 int 比 `memcpy` 慢 5 倍(!)?

这是thisquestion的后续行动我在哪里发布了这个程序:#include#include#include#include#include#include#include#include#includeclassStopwatch{public:typedefstd::chrono::high_resolution_clockClock;//!ConstructorstartsthestopwatchStopwatch():mStart(Clock::now()){}//!Returnselapsednumberofsecondsindecimalform.doubleelapse

c++ - 重用 copy-and-swap 习惯用法

我正在尝试将copy-and-swap习惯用法放入可重用的混音中:templatestructcopy_and_swap{Derived&operator=(Derivedcopy){Derived*derived=static_cast(this);derived->swap(copy);return*derived;}};我打算通过CRTP将其混入:structFoo:copy_and_swap{Foo(){std::cout然而,一个简单的测试表明它不起作用:Foox;Fooy;x=y;这只会打印两次“default”,既不会打印“copy”也不会打印“swap”。我在这里缺少什

c++ - 为什么 std::copy_if 签名不约束谓词类型

假设我们有以下情况:structA{inti;};structB{Aa;intother_things;};boolpredicate(constA&a){returna.i>123;}boolpredicate(constB&b){returnpredicate(b.a);}intmain(){std::vectora_source;std::vectorb_source;std::vectora_target;std::vectorb_target;std::copy_if(a_source.begin(),a_source.end(),std::back_inserter(a_t

c++ std::copy 类型转换为派生类可能吗?

我很确定没有办法明确地做到这一点,但我还是想问一下,以防万一有更好的方法。我有一个基类A和一个派生类B,现在我有一个指向B*的A*std::list,我想将这个A*列表复制到B的std::vector*基本上我想这样做:std::listaList=someObject.getAs();std::vectorbVec=std::vector(aList.begin(),aList.end());我很确定当列表和vector是相同类型时(例如,都是A*的)这应该可以编译,但是因为在这种情况下A*是B*的基类,所以我不能这样做这样,因为我必须像这样显式地进行类型转换:std::listaL