小编Pet*_*ter的帖子

使用Fenwick树增加范围

我想知道Fenwick树(或二进制索引树)是否可以修改为:

1)将一定范围内的所有元素的频率增加一定量

2)查询单个元素的频率.

这与传统的Fenwick树相反,传统的Fenwick Tree在单个元素上进行更新,并且在一个范围内完成查询(类似于反Fenwick树).

intervals data-structures fenwick-tree

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

插入的高效数据结构

我正在寻找一种数据结构(类似数组),允许快速(比O(N)更快)任意插入值到结构中.数据结构必须能够以插入方式打印出元素.这类似于List.Insert()(它太慢了,因为它必须移动每个元素),除了我不需要随机访问或删除.插入将始终在'数组'的大小范围内.所有值都是唯一的.不需要其他操作.

例如,如果Insert(x,i)在索引i(0-indexing)处插入值x.然后:

  • 插入(1,0)给出{1}
  • 插入(3,1)给出{1,3}
  • 插入(2,1)给出{1,2,3}
  • 插入(5,0)给出{5,1,2,3}

而且它需要能够在最后打印出{5,1,2,3}.

我正在使用C++.

c++ list insertion data-structures

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

用内联汇编C替换功能

我有一个函数,其内部代码我想转换为汇编(出于各种原因):

int foo(int x, int y, int z);
Run Code Online (Sandbox Code Playgroud)

我使用以下方法生成汇编代码:

clang -S -mllvm --x86-asm-syntax=intel foo.c
Run Code Online (Sandbox Code Playgroud)

程序集输出:foo.s从以下内容开始:

_foo:                               ## @foo
    .cfi_startproc
## BB#0:
    push    RBP
Ltmp2:
    .cfi_def_cfa_offset 16
...
Run Code Online (Sandbox Code Playgroud)

我假设这是该函数的相应汇编代码.我的问题是,我应该将汇编输出的哪一部分复制到C代码中(我正在尝试使用内联汇编)以便该函数可以工作?代码应如下所示:

int foo(int x, int y, int z) {
   __asm__("..."); // <-- What goes inside?
}
Run Code Online (Sandbox Code Playgroud)

谢谢

c assembly clang inline-assembly

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

STL传递迭代器与容器

如果我正在编写一个需要接收几个容器的库函数,哪个更好?

template <class Iterator1, class Iterator2>
void func_iterators(Iterator1 first1, Iterator1 last1, Iterator2 first2, Iterator2 last2)
Run Code Online (Sandbox Code Playgroud)

要么

template <class Container1, class Container2>
void func_containers(const Container1 &c1, const Container2 &c2)
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

cmath和math.h给出了不同的答案

当我使用cmath的atan函数和浮点数的数学时,我似乎得到了不同的答案:

#include <cmath>  
#include <math.h>                                                                              

#include <iostream>                                                             
#include <iomanip>                                                              

int main() {                                                                
    std::cout << std::setprecision(20) << atan(-0.57468467f) << std::endl;   
    std::cout << std::setprecision(20) << std::atan(-0.57468467f) << std::endl;  

    // I get:
    // -0.52159727580733605823
    // -0.52159726619720458984
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?两个库是否以不同方式实现?

c++ floating-point

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

CUDA 2D内核合并内存

如果我启动一个2D内核,其中每个线程在2D数组的单个元素上运行,那么访问该元素的方式是合并的?是数组[x] [y]还是数组[y] [x]?

cuda

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

使用nvcc编译给出"没有这样的文件或目录"

我正在尝试在Ubuntu上使用nvcc编译CUDA代码.但是,当我这样做时,我得到了这个输出:

> make
/usr/local/cuda/bin/nvcc -m64 --ptxas-options="-v" -gencode arch=compute_11,code=sm_11 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -o main main.cu
gcc: No such file or directory
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)

即使我正在尝试编译只包含主函数的文件,它仍然无效:

> /usr/local/cuda/bin/nvcc main.cu 
gcc: No such file or directory
Run Code Online (Sandbox Code Playgroud)

nvcc似乎对--version有所反应,所以它肯定存在.我不知道为什么它会调用gcc.

c++ cuda nvcc

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