问题列表 - 第318118页

C++ 函数调用概念不明确

我有一个 C++ 宏,我想用它来调用一个重载的函数模板。我希望这些函数模板之一仅接受浮点值,而另一个函数模板将接受其他所有内容。

以下是我使用 C++ 20 在https://cpp.sh/中运行的代码:

#include <iostream>
#include <string>
#include <vector>
#include <type_traits>
#include <concepts>

template< typename T>
concept NotFloatingPoint = requires
{
    !std::is_same_v<T, double> || !std::is_same_v<T, float>;
};

template< NotFloatingPoint T, NotFloatingPoint U, bool isDistanceType_ = false >
void ProcConstantConfigForce( T& value_ )
{
    std::cout << "Inside ProcConstantConfigForce()\n";
    std::cout << value_;
}

template< typename T>
concept FloatingPoint = requires
{
    std::is_same_v<T, double> || std::is_same_v<T, float>;
};

template< FloatingPoint T, FloatingPoint U, bool isDistanceType_ = false > …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++-concepts c++20

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

为什么 &amp;(NULL-&gt;local) 不会导致我的程序崩溃?

这是示例代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct substruct {
    int integer1;
    unsigned char boolean1;
    unsigned char boolean2;

    char *ptr1;
    char *ptr2;
} substruct_t;

typedef struct tester {
    char *ptr1; //0x00
    char *ptr2; //0x08


    unsigned char boolean1; //0x10
    unsigned char boolean2; //0x11
    int integer1; //0x12

    // padding bypte 0x16 -> 0x18
    char *ptr3; //0x18
    // It is not pointer.
    substruct_t local; // 0x20

    char *ptr4;
} tester_t;


int main()
{
    tester_t *tester;
    tester = NULL;
    printf("0\n");
    substruct_t *localptr = …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

将项目粘贴到向量中并将它们分组为 x 的倍数,并用空格分隔

如果我有以下包含一些数据的向量,例如

a <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
Run Code Online (Sandbox Code Playgroud)

假设我想将这 20 个值按照排列顺序分为 4 个,如下所示

[1] "1\n2\n3\n4" "5\n6\n7\n8" "9\n10\n11\n12" "13\n14\n15\n16" "17\n18\n19\n20"
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我从这个函数开始paste,但我被困住了:(我假设它会涉及一个 for 循环。

paste(a)
Run Code Online (Sandbox Code Playgroud)

grouping r paste

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

C++17 为什么传入参数时没有提供默认构造函数

我有这门课:

\n
class MyClass {\npublic:\n    int someMember;\n    std::vector<int> someVectorMember;\n};\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道为什么这行不通:

\n
MyClass(1, std::vector<int>{1,2});\n
Run Code Online (Sandbox Code Playgroud)\n

错误:

\n
main.cpp:21:37: error: no matching function for call to \xe2\x80\x98MyClass::MyClass(int, std::vector)\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

c++ constructor initialization

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

使用 std::vector::data() 访问元素

对于这段代码,我使用data()向量的方法来访问其元素:

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector (5);

  int* p = myvector.data();

  *p = 10;
  ++p;
  *p = 20;
  p[2] = 100;

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

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

这会产生

myvector contains: 10 20 0 100 0
Run Code Online (Sandbox Code Playgroud)

问题是为什么p[2]是0?假设myvector.data()是一个指向第一个元素(索引 0)的指针,那么p[0]就是 10 就可以了。++p指向下一个元素,即p[1]20,这也很好。现在,p[2]是 后的下一个元素p[1]。所以,顺序应该是10 20 100。这里有什么错误吗?

c++ pointers stdvector

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

Delphi 12(已修补)- TParallel.for - 离开 for 循环后 CPU 使用率较高

我使用 TParallel.For 像这样:

procedure TForm1.Button2Click(Sender: TObject);
var
  lF: TParallel;
begin
     lF := TParallel.Create;
     try

       lF.&For(1, 100000,
         procedure(I: Integer)
         var x: Integer;
             lList: TStringList;
         begin
              lList := TStringList.Create;
              try
                lList.Add(i.ToString);
              finally
                lList.Free;
              end;
         end );

     finally
       FreeAndNIL(lF);
     end;
end;
Run Code Online (Sandbox Code Playgroud)

自 Delphi 12(已修补)以来,我可以看到 for 循环结束后 CPU 使用率很高。直到 11.3 CPU 仅在 for 循环执行期间使用,完成后将返回到 0。

有人知道还有其他设置吗?我已经尝试过尝试,TThreadPool.Default.SetMaxWorkerThreads但没有成功。

delphi delphi-12-athens

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

ceil(double(int)*double) 还是 ceil(float(int*double))?

我有这个 C++ 代码:

int x;
double y;

// do sth

int z = ceil(x*y);
Run Code Online (Sandbox Code Playgroud)

如果x = 410y = 1.1那么z = 452就该在什么时候451。我更改为z = ceil(float(x*y))并且有效。我的朋友建议z = ceil(double(x)*y)改为。的 2 个定义之间有什么区别吗z?我应该使用哪一个?

还有x*y做什么的?我怀疑它相当于float(x)*y但我不太确定。

c++ floating-accuracy ceil

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

为什么我们在 x86 上将 64 位无符号整数转换为 32 位浮点数时要设置最低有效位?

#include <cstddef>
float cast(size_t sz){return sz;}
Run Code Online (Sandbox Code Playgroud)

在 Clang 13.0.1 上编译上述代码会-mavx2 -O3生成以下代码:

cast(unsigned long):                               # @cast(unsigned long)
        test    rdi, rdi
        js      .LBB0_1
        vcvtsi2ss       xmm0, xmm0, rdi
        ret
.LBB0_1:
        mov     rax, rdi
        shr     rax
        and     edi, 1
        or      rdi, rax
        vcvtsi2ss       xmm0, xmm0, rdi
        vaddss  xmm0, xmm0, xmm0
        ret
Run Code Online (Sandbox Code Playgroud)

GCC、MSVC 和 Intel 编译器以及旧版本也可以生成类似的代码。

我理解该算法的总体目标是解决以下事实:在 AVX-512 之前,没有从 64 位无符号 int 到 float 或 double 的转换指令。

因此,如果数字大到足以被解释为负数,则会将其减半、转换,然后将其加倍。但是,如果在原始整数中设置最低有效位,那么设置它的目的是什么?

这似乎是浪费时间,因为浮点数只有 23 个有效位,并且该位保证不重要。也许如果它是增量指令,则在某些情况下可能会影响有效位。但仅仅一个 or 指令似乎没有做任何事情。

c++ assembly x86-64 clang floating-point-conversion

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

高效的列表排序:使用堆代替标准排序速度较慢

我正在尝试创建一种更有效的方法来对 python 中的列表和字典进行排序,并遇到了Efficient data Structurekeepingingobjectsonmultiplekeys。建议的解决方案是使用heapq模块。

然而,在我的测试中,堆似乎比原生 Python 排序算法慢两倍。下面是我用来做简单测试的代码。结果例如:

堆: 0.005993366241455078

标准: 0.0020036697387695312

有没有办法真正使用堆并提高性能,正如上面链接的帖子声称的那样?该代码会是什么样子?

这是测试它的代码:

import  random
import time
from heapq import *

standardlist = []
heaplist = []
for i in range(10000):
    num = random.randint(0,10000)
    standardlist.append(num)
    heappush(heaplist, num)

# Standard sorting method:
start_time = time.time()
sorted_list = sorted(standardlist)
finish_time_1 = time.time() - start_time

# Heap sorting method:
start_time = time.time()
heap_sorted_list = [heappop(heaplist) for i in range(len(heaplist))]
finish_time_2 = time.time() - start_time

print("Standard Finish Time:", finish_time_1) …
Run Code Online (Sandbox Code Playgroud)

python sorting heap performance list

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

R 如何将列名转换为更好的年份和月份格式

我有一个数据框,其中一些列的列名称为年份和月份。

ID <- c(1, 3, 9L, 21L, 15L)
names <- c("as", "ds", "sds", "www", "jgh")
`201401` <- c("12L", "310L", "2379L", "234L", "14L")
`201402` <- c("12L", "310L", "2379L", "234L", "14L")
`201403` <- c("12L", "310L", "2379L", "234L", "14L")
`201404` <- c("12L", "310L", "2379L", "234L", "14L")
Run Code Online (Sandbox Code Playgroud)

我想将年月列名称转换为日期格式,以便诸如201401变为Jan 2014等列。

df <- data.frame(ID, names, `201401`, `201402`, `201403`, `201404`, check.names = FALSE)

betterDate <-  as.Date(df$201401,"%m/%y")  #possible solution ?


Run Code Online (Sandbox Code Playgroud)

获得以下结果的最佳方法是什么?

预期结果 df 列名称为:

ID =c(1, 3, 9L, 21L, 15L)
names = c("as","ds" ,"sds" …
Run Code Online (Sandbox Code Playgroud)

r date lubridate

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