小编mas*_*oud的帖子

基准C++与Java,不切实际的结果

我做了一个简单的测试,我知道C++更快但我的测试结果不切实际.

C++代码是:

#include <stdio.h>
#include <windows.h>

unsigned long long s(unsigned long long n)
{
    unsigned long long s = 0;

    for (unsigned long long i = 0; i < n; i++)
        s += i;

    return s;
}

int main()
{
    LARGE_INTEGER freq, start, end;
    QueryPerformanceFrequency(&freq);
    QueryPerformanceCounter(&start);

    printf("%llu\n", s(1000000000));

    QueryPerformanceCounter(&end);
    double d = (double) (end.QuadPart - start.QuadPart) / freq.QuadPart * 1000.0;

    printf("Delta: %f\n", d);

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

Java代码是:

public class JavaApplication5 {

    public static long s(long n) {
        long s = …
Run Code Online (Sandbox Code Playgroud)

c++ java benchmarking gcc

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

如何在c ++中将void*转换为float(*)[3]?

这是代码段.

typedef struct Lib3dsMesh {
 //..
 float (*vertices)[3]; 
 //..
}


void* lib3ds_util_realloc_array(void *ptr, int old_size, int new_size, int  element_size) {
    // Do something here.
    return ptr;
}


mesh->vertices = lib3ds_util_realloc_array(mesh->vertices, mesh->nvertices, nvertices, 3 * sizeof(float));
Run Code Online (Sandbox Code Playgroud)

当我在visual c ++中编译此代码时,它返回错误"无法从void*转换为float(*)[3]".

我想知道如何将void*转换为float(*顶点)[3];

c++ casting

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

红黑树和Multimap

在许多编译器中,标准数据结构类似于Set,MapMultimap在后面使用Red-Black-Trees,并multimap存储多个和重复的键.

我有一个关于以下引用的问题:

"红黑树唯一地存储密钥,并且只为每个密钥绑定一个DataValue"

  1. 以上陈述是真的吗?
  2. 如果这是真的,我们如何使用红黑树来实现multimap(如C++ STL所做的那样)?

c# c++ java

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

如何在C中读取fortran二进制文件?

我有一个由fortran代码生成的二进制文件.该文件包含一系列双精度数.我需要在我的C程序中打开它,然后像通常的数组一样使用它.

我该怎么做?

二进制文件中如何表示double类型?

c fortran binaryfiles

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

基于相同的const文字优化std :: string

我们知道编译器可以重用相同的常量字符串文字来有效地节省内存.对于编译器,此优化是可选的.

两个字符串文字具有相同的指针值?

const char *s1 = "HELLO";
const char *s2 = "HELLO";
Run Code Online (Sandbox Code Playgroud)

s1并且s2可以有相同的地址.它们在许多编译器中具有相同的地址.例如,两者都指向地址0x409044.

好.

在我看来,问题是,为什么不std::string尝试具有相同的优势?并且它不会试图包围std::string该地址.

const std::string ss1("HELLO");
const std::string ss2("HELLO");

cout << (void*) ss1.c_str() << endl;
cout << (void*) ss2.c_str() << endl;
Run Code Online (Sandbox Code Playgroud)

ss1ss2有两个不同的地址.

这在技术上是不可能的吗?被语言禁止?或者标准库的实现开发人员不想要它?

c++

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

存储指向方法的派生指针

我想创建一个类,它具有指向其方法之一作为属性的指针.然后应该有一个方法,用于设置此指针.

class A {
    private:
        void (A::*curr_f)();
    public:

        void set(void (A::*f)()) {
            curr_f = f;
        }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试创建继承的类并将指针设置为其方法之一时,问题就开始了.

class B : A {
    public:
        void main() {
            set(&B::new_function);
        };
        void new_function() {};
};
Run Code Online (Sandbox Code Playgroud)

我得到的错误非常简单,但我仍然不知道如何解决这个问题.

error: no matching function for call to ‘B::set(void (B::*)())’
note: candidate is:
note: void A::set(void (A::*)())
note: no known conversion for argument 1 from ‘void (B::*)()’ to ‘void (A::*)()’
Run Code Online (Sandbox Code Playgroud)

c++ inheritance function-pointers

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

带索引的Swift访问数组会产生以下错误.知道为什么吗?

let index1 = arc4random_uniform(10);

let x = array[index1];
Run Code Online (Sandbox Code Playgroud)

第二行是给出以下错误

could not find an overload for 'subscript' that accepts the supplied arguments

let x = array[index1];
        ^~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

swift

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

qFastSin和qFastCos(速度,安全性和精确度)

最近,我发现了两个数学函数的qmath.h命名qFastSinqFastCos.这些函数是inline并使用查找表来计算sin和cos的值:

inline qreal qFastSin(qreal x)
{
    // Calculating si would be more accurate with qRound, but slower.
    int si = int(x * (0.5 * QT_SINE_TABLE_SIZE / M_PI)); 
    qreal d = x - si * (2.0 * M_PI / QT_SINE_TABLE_SIZE);
    int ci = si + QT_SINE_TABLE_SIZE / 4;
    si &= QT_SINE_TABLE_SIZE - 1;
    ci &= QT_SINE_TABLE_SIZE - 1;
    return qt_sine_table[si] + (qt_sine_table[ci] - 0.5 * qt_sine_table[si] * d) * d;
}

inline qreal …
Run Code Online (Sandbox Code Playgroud)

c++ api math qt

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

当看起来好的时候,为什么"期望初级表达"

按照我之前的问题 ,派生类的受保护成员是未知的

我无法理解那条线的哪一部分是错的,不知道吗?

这里有一个编译错误:

template <typename K, typename T>
bool graph<K, T>::is_edge(const K& k1, const K& k2)
{
  if (this->nod.find(k1) == this->nod.end() || this->nod.find(k2) == this->nod.end())
    throw std::string("is_edge: Node does not exist");

  if (k1 < k2) // Below line makes error: expected primary-expression!!!!
    return std::find(this->edg.begin(), this->edg.end(), edge(k1, k2)) != this->edg.end();
  return std::find(this->edg.begin(), this->edg.end(), edge(k2, k1)) != this->edg.end();
}
Run Code Online (Sandbox Code Playgroud)

或者,这句话有什么不对:

std::find(this->edg.begin(), this->edg.end(), edge(k1, k2)) != this->edg.end();
Run Code Online (Sandbox Code Playgroud)

完整的代码在这里,您可以其中测试和编译它.

c++

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

将OMP_SCHEDULE与#pragma omp一起用于并行调度(运行时)

我试图了解如何schedule(runtime)在C++中使用OpenMP 的指令.经过一些研究,我发现OMP_SCHEDULE(1)并且OMP_SCHEDULE(2).

我总结说我需要将varibale OMP_SCHEDULE设置为某个值.但是,我不知道该怎么做,我还没有找到任何可行的C++示例来解释我如何正确地这样做.

有人可以解释一下如何设置变量并提供一个有效的C++示例吗?

c++ schedule openmp

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

标签 统计

c++ ×8

java ×2

api ×1

benchmarking ×1

binaryfiles ×1

c ×1

c# ×1

casting ×1

fortran ×1

function-pointers ×1

gcc ×1

inheritance ×1

math ×1

openmp ×1

qt ×1

schedule ×1

swift ×1