草庐IT

复制集

全部标签

c++ - 如何以 STL 方式将一定数量的字符从文件复制到 vector ?

如果我想将一个文件的内容复制到一个vector中,我可以这样做:std::ifstreamfile("path_to_file");std::vectorbuffer(std::istream_iterator(file),std::istream_iterator());我的问题是,如果我只想复制前n个字符,我该怎么做?编辑我可以编写自己的copy版本,但有没有办法只使用现有组件来做到这一点? 最佳答案 正如亚历山大指出的那样,最快的方法是std::vectorbuffer(n);file.read(&buffer[0],n);在

c++ - 从一个动态分配的数组复制到另一个 C++

这似乎应该有一个super简单的解决方案,但我就是想不通。我只是创建一个调整大小的数组并尝试复制所有原始值,然后最后删除旧数组以释放内存。voidResizeArray(int*orig,intsize){int*resized=newint[size*2];for(inti=0;i这里似乎发生的是resized[i]=orig[i]是通过引用而不是值来复制值,因为在调整大小后打印orig会返回一堆垃圾值,除非我注释掉delete[]orig。我怎样才能从orig到resized的深拷贝,或者我还面临其他一些问题吗?我不想使用std::vector。 最佳答

c++ - 什么是串行复制?为什么它是这样实现的?

什么是序列拷贝?深拷贝和浅拷贝有区别吗?根据Duff'sdevice下的wiki条目,它传统上被实现为:do{//count>0assumed*to=*from++;//Notethatthe'to'pointerisNOTincremented}while(--count>0);然后它记下,说NotethattoisnotincrementedbecauseDuffwascopyingtoasinglememory-mappedoutputregister.我不太明白这个注释。如果to指针不递增,那么循环的意义何在?为什么那么它被实现为:*to=from[count-1];//doe

c++ - 在 Visual Studio 2010 中复制项目

在VisualStudio2010中是否有简单复制项目的方法?将包含项目的文件夹复制到其他路径并打开它会导致以下错误。我只对不会涉及超过1个简单操作的解决方案感兴趣。我正在创建一个简单的控制台项目,我将复制它数百次,但我并不喜欢每次需要完成如此简单的事情时都进入设置并重复多个步骤。我正在使用VisualC++Express2010。请注意下面的项目结构。我将它创建为一个空项目,并向其中添加了1个文件main.cpp。该项目是使用settings创建的.资源管理器中的项目看起来像this.有一个复制项目功能,但这意味着不止1个手动操作:打开旧项目;按菜单上的复制;关闭旧项目;复制解决方案

c# - 将一些移位代码从 C++ 复制到 C#

我正在尝试将枚举从C++代码转换为C#代码,但我无法理解它。C++代码是:enumFOO{FOO_1=0,FOO_2,//etc}#defineMASK(x)((1我不明白MASK在做什么,以及我如何在C#中模拟功能,或者理解它在做什么并在没有它的情况下手动设置枚举DISP。我不确定我所说的是否有道理,但当我不完全确定我在看什么时,这是可以预料的。 最佳答案 当您进行位移时,它会将所有1和0向左或向右移动一些值。在你的情况下1以二进制形式创建10000000000000000。(是的,那是16个零)。然后它获取该数字并使用|这是按位

c++ - 将元素插入 std::map 而无需额外复制

考虑这个程序:#include#include#definelogmagic_log_function//Pleasedon'tmindthis.////ADVENTURESOFPROGOTHEC++PROGRAM//classelement;typedefstd::mapmap_t;classelement{public:element(conststd::string&);element(constelement&);~element();std::stringname;};element::element(conststd::string&arg):name(arg){log("

c++ - 如何在不复制数组的情况下从 C++ 数组中删除每个第二个值?

问题:我想让数组A[6]={6,5,4,3,2,1}成为A[6]={5,3,1,1,1,1}。换句话说-“删除”从第0开始的每隔一个值,并将所有其他值向左移动。我的尝试:为此,我将使用此代码,其中a-数组A相关部分的长度(包含未删除元素的部分),ind-我要删除的值的索引。for(intj=ind;j但是,我无法使用这样的代码让它工作:voiddeleting(intA[],int&a,intind){for(intj=ind;j运行此代码后,我得到了A[6]={5,4,2,1,1507485184,1507485184}。所以,它删除了索引0、3处的元素。为什么要删除第3个索引?

c++ - 如何将二进制数据从一个流复制到另一个流?

目前我有一个程序将二进制数据加载到字符串流中,然后将数据传递到fstream,如下所示:stringstreamss(stringstream::binary|stringstream::in|stringstream::out);ss.write(data,512);//Loadsdataintostream//Usesamemoryblocktopassthedatabetweenthestreamschar*memBlock=newchar[512];ss.read(memBlock,512);ofstreamfout("someFile.bin",ios::binary);fo

c++ - 为什么后增需要复制,而前增不需要

我知道这个问题已经讨论过好几次了,但是我找不到解释为什么在后增量操作的情况下需要制作拷贝的帖子。引用来自stackoverflow的回复:intj=i++;//jwillcontaini,iwillbeincremented.intj=++i;//iwillbeincremented,andjwillcontaini+1.当考虑后/前增量的定义时,这完全有意义。很多时候比较pre/postincrement的性能时说postincrement需要做一个copy,increment它并返回copy,而pre-increment只是增加值,不会创建copy。虽然对比了几十个帖子的性能,但是

c++ - push_back 到 std::vector,复制构造函数被重复调用

这个问题在这里已经有了答案:vectorpush_backcallingcopy_constructormorethanonce?(5个答案)关闭4年前。使用is代码,我得到以下输出:A::A()iscalledtest#1A::A(constA&other)iscalledtest#2A::A(constA&other)iscalledA::A(constA&other)iscalledtest#3A::A(constA&other)iscalledA::A(constA&other)iscalledA::A(constA&other)iscalled在调试代码时,对于3个测试用例,