小编Joh*_*ica的帖子

如何打印std :: atomic <unsigned int>的值

std::atomic<unsigned int>在我的程序中使用.如何使用打印其值printf?因为如果我只是使用它不起作用%u.我知道我可以使用cout,但我的程序充满了printf电话,我不想替换它们.以前我使用的是unsigned int代替,std::atomic<unsigned int>所以我只是使用%u,因此打印工作正常.

c++ printing atomic

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

系统级的整数和字符串比较

整数和字符串如何在较低级别进行比较?就像我们使用时一样

int a = 11;
int b = 12;

compare(a,b); //Just an example comparison, not in any particular language.
Run Code Online (Sandbox Code Playgroud)

String a = "11";
String b = "12";

compare(a,b);
Run Code Online (Sandbox Code Playgroud)

现在我要问的是这两个比较之间的系统级差异是什么?问题不适用于任何特定语言,它只是一个普遍的问题.它也不是关于字符串到整数的转换/比较,反之亦然.我知道不同平台和不同语言的答案可能有所不同,但由于我对此没有任何线索,我只是问一个通用的问题.

为什么整数比较总是被认为字符串比较更快

string comparison integer

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

Java字符串数字比较器

我有一个方法返回需要排序的String列表.但是,我遇到了旧的字符串编号排序问题,并想知道是否有人可以协助比较器实现或指向我的方向.

该列表将返回一个列表:

State Lower Legislative District 1
State Lower Legislative District 11
State Lower Legislative District 12
...
State Lower Legislative District 2
...
State Lower Legislative District 100
...
State Upper Legislative District 1
State Upper Legislative District 11
...
Run Code Online (Sandbox Code Playgroud)

所以,首先我需要做一个基本的String排序,但是我需要按数字排序.要排序的数字应该总是跟踪,可能是2或3位数.

(编辑)我最初的想法是在空格上拆分字符串,在数字部分运行StringUtils.isNumeric,然后排序.然而,这对我来说似乎有点困难.

有人可以帮忙吗?

java natural-sort

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

无法从类型void*(classname::)()转换为类型void*(*)(void*)

class Scoreget{
    private:
        //some variables
    public:
        Scoreget(){
            //something here
        }

        void* basicgetscore(){
            //somthing here
        }

        void getscore(Scoreget s){
            pthread_t t;
            if(pthread_create(&t,NULL,s.basicgetscore,NULL)==-1){
               printf("Error 3\n");
               exit(3);
            }
            void *a;
            if(pthread_join(t,&a)==-1){
               printf("Error \n);
               exit(4);
            }
        }
};
Run Code Online (Sandbox Code Playgroud)

我试图运行一个单独的线程来调用一个函数,因为它使用execl()调用,因此将停止我的程序(我在Windows上,不能使用fork()).将线程与类结合起来给我带来了困难.

从一些谷歌搜索,我知道我需要制作最后一个功能的朋友或静态,并使用某种类型的指针.我试过了,但是碎片不合适.我甚至无法更改错误类型.现在让我很沮丧.得到同样的错误:

无法将Scoreget :: basicgetscore从void*(Scoreget ::)()类型转换为void*(*)(void*)

c++ multithreading

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

在JavaFX中使用滑动行标题的表控件

iTunes中的专辑视图具有光滑的效果,其中专辑标题和封面艺术始终保持在视图中.如果您向下滑动屏幕,它们将固定在屏幕顶部,直到它们碰到下一个专辑,然后它们就会滑落.

iPad截图

请注意,即使用户向下滚动,顶级专辑仍然完全可见.

  1. 这个控制或效果叫什么?我想要谷歌尝试空白.

  2. 我怎么能在JavaFX中做到这一点?我想在我的基于Java的GUI中模仿这个.TableView可以执行此操作,还是可以执行某些第三方控件?

java javafx tableview javafx-8

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

ltrace 的替代方案,它适用于与“-z now”链接的二进制文件?

ltrace不适用于与-z nowoption链接的二进制文件,这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与-z lazy.

有没有其他替代方法可以ltrace完成相同的工作,但也适用于now二进制文件?

c linux ltrace

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

代码如何在 C++ 抽象机上存储和执行?

在我读到的关于 C++ 的第一本书中,它详细介绍了代码是如何在机器上实际执行的(它提到了程序计数器、调用堆栈、返回地址等)。我发现了解这些东西是如何工作的真的很有趣,尽管我知道没有必要了解计算机的工作原理来编写好的代码。

在这个问答网站上阅读相同的主题时,我发现它绝不是我以前学习的方式,因为我阅读的只是 C++ 的某个实现,这取决于某些计算机架构和特定的编译器。C++ 代码也可以在完全不同的东西上运行,只要有一个符合“正确”方式的编译器。标准和“抽象机器”的行为定义了正确的方法(我希望到目前为止我做对了)。

当然,我仍然想知道像内存的代码段或程序计数器这样的概念是否仍然在标准中“以某种方式”描绘,如果是,它们在多大程度上被描绘出来?抽象机中如何描述一个接一个执行的代码片段的概念?

由于有人在评论中询问我是否希望向我重复该标准:我无法很好地理解该标准,无法准确确定它对抽象机器的看法/或标准的哪些陈述可以被解释为关于“程序计数器”“代码存储”等抽象概念的陈述。所以是的,出于无能为力,我要求社区解释标准中的内容。这种解释的预期结果是仍然符合“抽象”标准的抽象机器内部结构的最详细概念。

c++ language-lawyer program-counter abstract-machine

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

将拥有的数组分成拥有的两半

我想将一个拥有的数组分成两个拥有的一半\xe2\x80\x94两个单独的数组,而不是原始数组的切片。各自的大小是编译时间常数。有没有办法在不复制/克隆元素的情况下做到这一点?

\n
let array: [u8; 4] = [0, 1, 2, 3];\n\nlet chunk_0: [u8; 2] = ???;\nlet chunk_1: [u8; 2] = ???;\n\nassert_eq!(\n  [0, 1],\n  chunk_0\n);\nassert_eq!(\n  [2, 3],\n  chunk_1\n);\n
Run Code Online (Sandbox Code Playgroud)\n

因为这相当于仅仅移动元素的所有权,所以我有一种预感,应该对此有一个零成本的抽象。我想知道我是否可以通过巧妙地使用transmute和来做这样的事情forget。但这些功能的文档中有很多可怕的警告。

\n

我的主要动机是在内存中的大型数组上进行操作,而不需要太多的内存副本。例如:

\n
let raw = [0u8; 1024 * 1024];\n\nlet a = u128::from_be_array(???); // Take the first 16 bytes\nlet b = u64::from_le_array(???); // Take the next 8 bytes\nlet c = ...\n
Run Code Online (Sandbox Code Playgroud)\n

我知道实现上述模式的唯一方法是进行大量内存复制,这是多余的。

\n

arrays rust

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

在没有 UB 的情况下指示多种类型的非法价值的常用方法

我正在编写某种(开放寻址)哈希表。

对于我希望允许包含在哈希表中的所有有效类型T,我希望该类型有一些非法值来指示表槽为空。

我知道的最简单的解决方案是:

  1. 让桌子成为std::vector<std::optional<T>>
  2. 将该非法值设置为std::nullopt<T>

但我担心可能的开销(因为所有条目都变成std::optional这样)。有没有更快且至少同样安全的方法?

对于T,我将限制设置为:std::is_same_v<std::remove_cvref_t<T>, T>。除此之外没有任何限制。

c++

8
推荐指数
0
解决办法
135
查看次数

如何在不受系统时间变化影响的情况下测量经过的时间

我想以秒为单位测量经过的时间。用std::chrono::steady_clock我做。然而,它受到系统时间变化的影响。

稳定时钟不应该不受系统时间变化的影响吗?

我怎样才能做到这一点?

这是代码:

#include <iostream>
#include <chrono>
#include <time.h>

std::chrono::steady_clock::time_point t = std::chrono::steady_clock::now();

/* Change system time */
std::time_t tnow = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
tnow -= 20;
std::cout << "stime: " << stime(&tnow) << std::endl;
/********************************************************/

sleep(5);
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
std::cout << "ELAPSED: " << std::chrono::duration_cast<std::chrono::seconds>(t2-t).count() << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果如下:

stime: 0
ELAPSED: -15
Run Code Online (Sandbox Code Playgroud)

我想得到的是:

ELAPSED: 5
Run Code Online (Sandbox Code Playgroud)

编辑:

我添加了 C 标签,因为它似乎是一个内核(或板的构建根)错误。那么,如果没有,我怎么能做到这一点chrono?我的意思是,直接(无需观看系统时间更改)。

人们在chrono之前是如何生活的?

c++ c++-chrono

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