小编Pan*_*rei的帖子

在什么情况下调用C++拷贝构造函数?

我知道c ++中的以下情况,其中将调用复制构造函数:

  1. 当为现有对象分配其自己的类的对象时

    MyClass A,B;
    A = new MyClass();
    B=A; //copy constructor called 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果函数接收作为参数,按值传递,则为类的对象

    void foo(MyClass a);
    foo(a); //copy constructor invoked
    
    Run Code Online (Sandbox Code Playgroud)
  3. 当函数返回(按值)类的对象时

    MyClass foo ()
       {
          MyClass temp;
          ....
          return temp; //copy constructor called
       } 
    
    Run Code Online (Sandbox Code Playgroud)

请随时纠正我所犯的任何错误; 但是如果有任何其他情况需要调用复制构造函数,我会更好奇.

c++ constructor copy-constructor visual-c++

30
推荐指数
5
解决办法
3万
查看次数

计算11的1位数到N的幂

我遇到了一个有趣的问题:你如何计算11的表示中的1位数到N的幂,0<N<=1000.

d是1位数

N = 2 11 ^ 2 = 121 d = 2

N = 3 11 ^ 3 = 1331 d = 2

最差时间复杂度预期为O(N ^ 2)

你计算数字和计算我得到最后一位数并除以10的1位数的简单方法不能很好地工作.11 ^ 1000甚至在任何标准数据类型中都不可重复.

有任何想法吗?

algorithm

7
推荐指数
1
解决办法
5180
查看次数

Python libvirt API - 创建一个虚拟机

我正在尝试创建一个python脚本来处理基本的VM操作,例如:创建VM,删除VM,启动,停止等.

目前我很"坚持" create

从命令行,您将执行以下操作:

qemu-img create -f qcow2 vdisk.img <size>
virt-install --virt-type kvm --name testVM --ram 1024
 --cdrom=ubuntu.iso  --disk /path/to/virtual/drive,size=10,format=qcow2
 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
 --os-type=linux
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的VM,testVM并在之前定义的上安装它vdisk.img

但我想在python中完成所有这些; 我知道如何处理第二部分:

  1. 从VM的XML模板开始
  2. 打开libvirt连接并使用连接处理程序创建VM

    但我想知道第一部分,你必须创建虚拟磁盘.

有没有libvirt API calls可以使用的?

或者,你必须在系统调用qemu-img create来创建虚拟磁盘?

python kvm libvirt hypervisor

5
推荐指数
1
解决办法
4123
查看次数

得到两个间隔列表,得到重叠间隔的数量

我最近遇到了一个有趣的问题:

给定两个间隔列表,找到两个列表中的重叠间隔总数.

Example

L1: ([1,2][2,3][4,5][6,7])
L2: ([1,5][2,3][4,7][5,7])

[1,5] overlaps [1,2] [2,3] [4,5]
[2,3] overlaps [1,2] [2,3]
[4,7] overlaps [4,5] [6,7]
[5,7] overlaps [4,5] [6,7]

total = 3+2+2+2 = 9
Run Code Online (Sandbox Code Playgroud)

显然蛮力方法有效,但它太慢了(我需要比O(n ^ 2)更好的东西).

我也喜欢这里的类似问题.但它并不完全一样......

任何帮助表示赞赏

c++ algorithm

5
推荐指数
1
解决办法
976
查看次数

如何删除使用placement new分配的对象

c ++中的new运算符有很多面孔,但我对新的贴片感兴趣.

假设您在特定内存位置分配内存

 int memoryPool[poolSize*sizeof(int)];
 int* p = new (mem) int; //allocates memory inside the memoryPool buffer

 delete p; //segmentation fault 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何正确释放内存?如果不使用内置类型int,我会使用一些名为myClass的类?

 myClass memoryPool[poolSize*sizeof(myClass )];
 myClass * p = new (mem) myClass ; //allocates memory inside the memoryPool buffer

 delete p; //segmentation fault 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

c++ memory-management new-operator dynamic-memory-allocation

4
推荐指数
1
解决办法
983
查看次数

测试返回三角形类型的函数

作为筛选面试的一部分,我得到了以下问题:

编写一个函数,接收三角形边长的三个整数输入,并返回四个值之一,以确定三角形类型(1 =斜角,2 =等腰,3 =等边,4 =误差).假设另一个开发人员编写了该函数,为该函数生成测试用例.

我的回答是:

#define ERROR 4
#define EQUILATERAL 3
#define ISOSCELES 2
#define SCALENE 1

int detemineTriangle(int x, int y, int z)
{
    if((x<=0) || (y<=0) || (z<=0))
        return ERROR;

    if((x==y) || (x==z) || (y==z))
    {
        if((x==y) && (y==z))
            return EQUILATERAL;
        else
            return ISOSCELES;
    }

    return SCALENE;
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

detemineTriangle (0,0,0);   //error
detemineTriangle (2,2,2);   //equilateral
detemineTriangle (3,3,1);   //isosceles
detemineTriangle (1,3,3);   //isosceles
detemineTriangle (3,1,3);   //isosceles
detemineTriangle (1,2,3);   //scalene
detemineTriangle (-1,2,3);  //error  scalene
detemineTriangle (1,-2,3);  //error  scalene
detemineTriangle …
Run Code Online (Sandbox Code Playgroud)

c c++ testing integration-testing

0
推荐指数
1
解决办法
3815
查看次数

优化位操作以获取NOT值

我有一个无符号的16位数,a,我需要得到~a的值.简单地取〜的值是行不通的(对于a = 10,我需要~a = 5,而不是~a = 7FF5).我能想到的最好的是:

int negate(int a)
{
 int mask1 = 0x4000;
 int mask2 = 0x7FFF;

 for (int i=0;i<15;i++)
 {
   if (!(a&mask1))
   {
      mask1>>=1;
      mask2>>=1;
   }
   else
      break;   
 }

 int t = (0x7FFF - ~a) & mask2;

 return t;    
}
Run Code Online (Sandbox Code Playgroud)

这个问题是它太慢了; 你知道更快的方法来获得我需要的结果吗?

谢谢你的帮助

c c++ optimization bit-manipulation

0
推荐指数
1
解决办法
147
查看次数