小编Dil*_*123的帖子

Java同步线程无法按预期工作

以下代码无法正常工作:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class Worker implements Runnable {

    public void run() {
        System.out.println("Started.");
        process();

    }
    private Random random = new Random();

    private Object lock1 = new Object();
    private Object lock2 = new Object();

    private static List<Integer> list1 = new ArrayList<Integer>();
    private static List<Integer> list2 = new ArrayList<Integer>();

    public void stageOne() {

        synchronized (lock1) {

            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            list1.add(random.nextInt(100));
        }

    }

    public void stageTwo() {

        synchronized (lock2) {
            try { …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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

使用模板减少const和非const非成员函数的代码重复

我有以下两个功能:

Thing* find_thing_by_name(const String & name, Map<String,Thing*> & thing_map)
{
    auto it = thing_map.find(name);
    return it->second;
}
const Thing* find_thing_by_name(const String & name, const Map<String,Thing*> & thing_map)
{
    auto it = thing_map.find(name);
    return it->second;
}
Run Code Online (Sandbox Code Playgroud)

这只是我想要解决的问题的一个简单示例.

函数具有完全相同的主体,但我需要处理我的地图的const和非const版本.我已经看到使用const转换使用成员函数处理此问题,但这些是非成员函数,我想使用模板解决此问题.如何编写一个减少代码重复的模板化函数?我甚至不确定从哪里开始.

c++ templates

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

可以创建所有组合和这些组合的所有组的算法

假设我有一组元素 S = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

我想创建3的组合并将它们组合在一起,使得多个组合中不会出现任何数字.

这是一个例子: { {3, 7, 9}, {1, 2, 4}, {5, 6, 8} }

组中数字的顺序无关紧要,整个示例中组的顺序也不重要.

简而言之,我想要原始集合中每个可能的组合的每个可能的组合,不包括出现在多个组中的数字的组合.

我的问题:这在运行时和内存方面是否真的可行?我的样本量可能在30-50左右.

如果是这样,创建此算法的最佳方法是什么?是否最好创建所有可能的组合,并仅在数量尚未出现时选择组?

我在Qt 5.6中写这个,这是一个基于C++的框架.

c++ algorithm combinations

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

为什么屏蔽负数会产生正数?

在c ++中,我有以下代码:

int x = -3;
x &= 0xffff;
cout << x;
Run Code Online (Sandbox Code Playgroud)

这产生了

65533
Run Code Online (Sandbox Code Playgroud)

但如果我删除否定,所以我有这个:

int x = 3;
x &= 0xffff;
cout << x;
Run Code Online (Sandbox Code Playgroud)

我只是得到3了结果

为什么第一个结果不会产生负数?我期望-3将符号扩展到16位,这应该仍然给出二进制补码负数,考虑到所有这些扩展位都是1.因此最重要的位也是1.

c++ bitmask bit

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

标签 统计

c++ ×3

algorithm ×1

bit ×1

bitmask ×1

combinations ×1

java ×1

multithreading ×1

templates ×1