小编ere*_*eOn的帖子

有没有一种很好的方法可以将unsigned char*转换为char*?

那些日子我一直在阅读很多reinterpret_cast<>关于应该如何使用它(并且在大多数情况下避免使用它).

虽然我知道,使用reinterpret_cast<>从投,说unsigned char*char*实现定义(因此非便携式),这似乎是没有别的办法了有效转换一个到另一个.

假设我使用一个unsigned char*处理某些计算的库.Internaly,我已经char*用来存储我的数据(我不能改变它,因为如果我这样做会杀死小狗).

我会做的事情如下:

char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();

// We use it here
// processData() takes a unsigned char*
void processData(reinterpret_cast<unsigned char*>(mydata), mydatalen);

// I could have done this:
void processData((unsigned char*)mydata, mydatalen);
// But it would have resulted in a similar call I guess ?
Run Code Online (Sandbox Code Playgroud)

如果我希望我的代码具有高度可移植性,那么我似乎别无选择,只能先复制数据.就像是:

char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ casting reinterpret-cast

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

make:c:找不到命令

我正在尝试运行我的make文件但是我收到以下两个错误:

make:c:找不到命令

make:o:找不到命令

我试图在cygwin中做这个.我有g ++并在其上安装,但是当我运行make文件时,我收到了这些错误.

有任何想法吗?

makefile:

all: MergeSort clean

MergeSort: main.o MergeSort.o
    $g++ -o MergeSort main.o MergeSort.o

main.o: main.cpp MergeSort.h
    $g++ -c main.cpp

MergeSort.o: MergeSort.cpp MergeSort.h
    $g++ -c MergeSort.cpp

clean:
    rm -rf *o

cleanall:
    rm -rf *o *exe
Run Code Online (Sandbox Code Playgroud)

c++ linux cygwin makefile

1
推荐指数
1
解决办法
2万
查看次数

用于检查素数不起作用的C++代码

我在使用这个C++代码时遇到了麻烦.整数num是一个我要检查它是否为素数的数字.但是这个程序总是返回false.它可能很简单但我找不到任何东西.

for(int i=2;i<num;i++){ //primes are allowed to be divided by 1 so we start at 2
        if(num % i == 0){ //can be divided by a number other than itself or 1 so we trip out
            return false;
        } else if(i == num){ //if we've already done checks as high as possible and not tripped out yet then report success
            return true;
        }
}
Run Code Online (Sandbox Code Playgroud)

c++ primes

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

平均的哪些实现最准确?

鉴于这两个平均函数的实现:

float average(const vector<float>& seq)
{
  float sum = 0.0f;

  for (auto&& value : seq)
  {
    sum += value;
  }

  return sum / seq.size();
}
Run Code Online (Sandbox Code Playgroud)

和:

float average(const vector<float>& seq)
{
  float avg = 0.0f;

  for (auto&& value : seq)
  {
    avg += value / seq.size();
  }

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

为了说明我的问题,想象一下我们在输入数据上有很大的不同,如下所示:

1.0f, 0.0f, 0.0f, 0.0f, 1000000.0f
Run Code Online (Sandbox Code Playgroud)

我的猜测是,在第一个实现中,sum可以增长"太多"并且松散最低有效数字而1000000.0f不是1000001.0f在求和循环结束时.

另一方面,由于要执行的分割数量,第二个实现似乎在理论上效率较低(我没有描述任何内容,这是一个盲目的猜测).

那么,这些实现中的一个是否优于另一个?我是否认为第一次实施不太准确?

c++ algorithm floating-accuracy

-1
推荐指数
1
解决办法
204
查看次数