草庐IT

arr_copy

全部标签

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

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

c++ - std::iterator、指针和 VC++ 警告 C4996

int*arr=(int*)malloc(100*sizeof(int));int*arr_copy=(int*)malloc(100*sizeof(int));srand(123456789L);for(inti=0;i编译时我收到了std::copy()的警告:c:\programfiles(x86)\microsoftvisualstudio10.0\vc\include\xutility(2227):warningC4996:'std::_Copy_impl':Functioncallwithparametersthatmaybeunsafe-thiscallreliesont

Windows 批处理 : Unicode parameters for (robo) copy command

我需要在一个批处理文件中复制多个文件。这些文件具有映射到不同代码页的Unicode名称。示例:setArabicFile=ڊڌڵڲڛشسsetCyrillicFile=щЖЛдЉиsetGermanFile=Büchercopy%ArabicFile%SomePlaceElsecopy%CyrillicFile%SomePlaceElsecopy%GermanFile%SomePlaceElse问题:批处理文件不能是Unicode。问题:如何将Unicode文件名写入批处理文件以便复制命令识别它们?注意事项:我不关心文件名如何显示。实际上批处理文件不仅仅是复制这些文件,我只是简化了描述