草庐IT

复制集

全部标签

c++ - 复制 std::vector 但将 lambda 应用于每个元素

我有一个std::vectorXofstd::vectorof,say,doubleinC++.我如何将X转换为std::vectorYofint使得X[i].size()==Y[i]对所有可接受的索引i成立?std::vector>X;.../*WhatIwanttodoshouldlookasfollows*/std::vectorY=std::copy_and_transform(X,lambda_to_get_size);当然,这可以通过循环来实现,但在C++11中我们更愿意使用lambda表达式。我在std::algorithm中没有找到类似的东西。标准工具似乎只提供更改原始

c++ - 我可以在不使用原始指针的情况下避免在 std::initializer_list 初始化期间进行复制吗?

假设我有几个在本地声明的对象,我想使用基于范围的for语法对其进行迭代。这似乎运作良好,但是,似乎要将本地对象放入initializer_list,执行复制。这对于像std::shared_ptr这样的对象来说是个坏消息,据我所知,增加引用计数是一个原子操作。我认为可以避免这种情况的唯一方法是使用原始指针。#include#includeintmain(){std::shared_ptrptrInt1=std::make_shared(1);std::shared_ptrptrInt2=std::make_shared(2);/*inthisloop,ptrInt1andptrInt2

c++ - 复制整数位的最快方法

复制整数位的最快方法是什么。例如,17->10001复制后:1100000011 最佳答案 看起来像是位交错的变体。Interleavebitstheobviousway(modifiedfromhttp://graphics.stanford.edu/~seander/bithacks.html)unsignedintx=17;unsignedintz=0;//zgetstheresultingMortonNumber.for(inti=0;i参见http://graphics.stanford.edu/~seander/bith

c++ - 将整数复制到缓冲区 memcpy C++

基本上我想将指针的地址存储在缓冲区中。不要问我为什么char*buff="myBuff";char*myData=(char*)malloc(sizeof(char*));intaddressOfArgTwo=(unsignedint)buff;memcpy(myData,&addressOfArgTwo,sizeof(char*));cout我不明白为什么上面的代码不起作用。它输出:IntVal:4472832Addressinbuffer:0当Buffer中的IntVal和Address应该相同时。谢谢 最佳答案 您取消引用一个

c++ - STL priority_queue 复制比较器类

我正在尝试使用自定义比较器创建优先级队列:std::priority_queue,MyComparator>pq;我的问题是MyComparator有一个存储附加状态的方法。因为MyComparator被复制到优先级队列(据我所知),所以我无法在优先级队列持有的MyComparator实例上调用此方法。有没有办法:获得对优先级队列持有的MyComparator实例的访问权,或者:以某种方式通过引用传递原始MyComparator实例 最佳答案 STL容器中使用的比较对象以及STL算法中使用的谓词必须是可复制的对象和方法,算法可以随意

C++ 默认复制构造函数

我知道如果在类中将复制构造函数声明为私有(private),编译器将不会生成默认的复制构造函数。但是有人可以解释为什么编译器会那样做吗?如果复制构造函数被声明为protected会怎样?编译器会提供默认的复制构造函数吗?如果copyctor被声明为private但有一个定义,例如foo(const&obj){} 最佳答案 在类中声明的任何复制构造函数(无论是私有(private)的、公共(public)的还是protected)都意味着编译器不会生成默认的复制构造函数。在类中声明的那个是否也被定义,只控制具有适当级别可见性的代码是否

c++ - 复制对象时的虚拟表

#include#includeclassA{public:A(inta):_a(a){}virtual~A(){}virtualvoidf()const{std::cout输出:1我了解到,将派生(扩展)类对象复制到基类对象时,派生对象被剪切,只复制基类数据。但我认为'ref'的虚拟表现在应该是'b'的虚拟表所以'ref.f();'应该调用函数:voidB::f()const{std::cout但是在复制之后'ref'的vtbl仍然是类A的vtbl。为什么?谢谢。 最佳答案 首先,“虚拟表”不是标准的C++概念。实现动态绑定(bi

c++ - 将数组复制到 vector 中

我写了一个小程序:voidshowrecord(){char*a[]={"O_BILLABLE_ACCOUNT","O_CUSTOMER_TYPE_INDICATOR","O_A_PARTY_MSISDN_ID","O_A_PARTY_EQUIPMENT_NUMBER","O_A_PARTY_IMSI","O_A_PARTY_LOCATION_INFO_CELL_ID",...};vectorfields(a,a+75);cout我有一个字符串文字数组,我希望将它们复制到一个vector中。我没有找到任何其他简单的方法来做到这一点:(。或者如果有任何直接的方法来初始化vector而不使

c++ - 在 C++ 中,当我按值将对象传递给函数时,对象是否被复制到堆栈中?

我刚刚开始接触C++(我是一名经验丰富的Python/Java开发人员,正在深入了解OpenCL的更好部分),我对如何将对象传递给函数感到非常困惑。假设我有一个简单的类:classThing{intvar;intvar2;intvar3;voiddoSomething();};现在,这个类的“大小”至少是3*sizeof(int)(我不确定是否存储了函数指针)。现在假设我有两个函数签名:voiddoThing1(Thingt);voiddoThing2(Thing*t);当我调用doThing1,它会导致整个实例被复制到堆栈上吗?当我调用doThing2,是否只需要sizeof(Thi

C++ 模板复制构造函数,编译器说 "passing const as this argument discards qualifiers"

我正在尝试创建动态矩阵的模板类。凭借我目前对C++的了解,我设法解决了一些问题,但我被复制构造函数和重载operator=;困住了。换句话说,我无法创建对象的拷贝。在我看来这应该可行,但我的编译器friend告诉我有1个错误:错误:将“constMatrix”作为“intMatrix::getElement(int,int)[withT=int]”的“this”参数传递会丢弃此行的限定符[-fpermissive]:m[i][j]=original.getElement(i,j);当我想创建一个对象时:Matrixm=Matrix(3,3);我的模板类在这里:templateclass