小编Ulr*_*rdt的帖子

从整数中检索最后6位

我需要获取整数或Uint32的最后6位.例如,如果我的值为183,那么我需要最后六位,110 111即ie 55.

我写了一小段代码,但它没有按预期运行.你们能指出我犯错的地方吗?

int compress8bitTolessBit( int value_to_compress, int no_of_bits_to_compress )
{
    int ret = 0;
    while(no_of_bits_to_compress--)
    {
        std::cout << " the value of bits "<< no_of_bits_to_compress << std::endl;
        ret >>= 1;
        ret |= ( value_to_compress%2 );
        value_to_compress /= 2;
    }
    return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int val = compress8bitTolessBit( 183, 5 );

    std::cout <<" the value is "<< val << std::endl;
      system("pause>nul");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

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

尝试从用户模式进程创建全局文件映射对象失败

我有一个Windows应用程序运行而不需要提升.我需要为应用程序的所有正在运行的实例之间共享的内存数组创建一个文件映射对象(请注意,其中一些实例可能在不同的登录会话中运行.)

我调用CreateFileMapping API来创建它,使用全局名称,即Global\sharedname使用安全描述符提供all访问权限,everyone但API失败,错误代码为5,或者ERROR_ACCESS_DENIED.

然后我开始阅读文档,发现我的进程需要SeCreateGlobalPrivilege特权.但是当我尝试分配该权限时,AdjustTokenPrivileges返回错误代码ERROR_NOT_ALL_ASSIGNED,我被卡住....

那么这里有什么诀窍,那个疯狂的MS怎么想让我们这样做?

PS.我之前可以使用相同的all access for everyone安全描述符和Global\sharedmutex名称创建一个全局命名的互斥锁(用于对共享内存的同步访问),而不会出现问题.

windows winapi shared-memory file-mapping

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

C++ 11:用于调用类型的默认构造函数的可变参数lambda模板

我想为a创建一个模板,std::function<T(Variable nums of arguments)>通过调用默认构造函数来返回类的默认值.

我试过这个:

template <class T,class... Args> inline std::function<T(Args...)> zero(){
    return [](Args...){ return T();};
}
Run Code Online (Sandbox Code Playgroud)

我想在你只需要默认值而没有复杂功能的情况下使用它,例如在我的Image<T>类中:

template <typename T> class Image{
    ...
    void drawEachPixel(std::function<T(size_t,size_t)> func){
        forRange(x,w){
            forRange(y,h){
                this->setPixel(x,y,func(x,y));
            }
        }
    }
    ...
};
Run Code Online (Sandbox Code Playgroud)

清除我可以打电话的图像:

image.drawEachPixel(zero());
Run Code Online (Sandbox Code Playgroud)

编译时我得到错误no matching function for call to 'Image<unsigned char>::drawEachPixel(std::function<unsigned char()>)'...

c++ lambda templates variadic-templates c++11

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

为什么gcc99指向毫无意义的错误,而标准的gcc却没有?

我正在通过本文学习ALSA编程,并且我尝试编译以下示例:

/*

This example opens the default PCM device, sets
some parameters, and then displays the value
of most of the hardware parameters. It does not
perform any sound playback or recording.

*/

/* Use the newer ALSA API */
#define ALSA_PCM_NEW_HW_PARAMS_API

/* All of the ALSA library API is defined
 * in this header */
#include <alsa/asoundlib.h>

int main() {
  int rc;
  snd_pcm_t *handle;
  snd_pcm_hw_params_t *params;
  unsigned int val, val2;
  int dir;
  snd_pcm_uframes_t frames;

  /* Open PCM …
Run Code Online (Sandbox Code Playgroud)

c gcc c99

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

使用__debugbreak()尝试/捕获

我正在使用在某些情况下运行__debugbreak()的第三方C++ DLL,并且在执行此操作之前不检查IsDebuggerPresent().当场景发生在调试器外部时(例如,运行应用程序的最终用户),这会导致我的应用程序"崩溃".我想抓住这个并自己处理它,或者至少忽略它.

我实际上已经有一个未处理的异常过滤器来将SEH转换为C++异常一段时间,所以它有点奇怪,它不起作用.

::SetUnhandledExceptionFilter(OnUnhandledException);
Run Code Online (Sandbox Code Playgroud)

我一直在做一些直接测试,标准__try/__除了工作,所以我可以将每个调用包装成DLL作为后备,但似乎是如果__try/__除了工作,那么:: SetUnhandledExceptionFilter()应该也工作.

    __try
    {
        __debugbreak();
    }
    __except (EXCEPTION_EXECUTE_HANDLER)
    {
        printf("caught");
    }
Run Code Online (Sandbox Code Playgroud)

try/catch(...)不起作用.

    try
    {
        __debugbreak();
    }
    catch (...)
    {
        printf("caught");
    }
Run Code Online (Sandbox Code Playgroud)

_set_se_translator()也不起作用.

https://msdn.microsoft.com/en-us/library/ms679297(VS.85).aspx上的MSDN文档中可以看出它应该作为结构化异常.我意识到这是DebugBreak()的文档,但我也测试过它,并且遇到了同样的问题,即使是"catch(...)".

我正在和/ EHa一起编译.

如何捕获__debugbreak(asm INT 3),或者至少改变行为?

c++ winapi exception-handling exception

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

map() 和 filter() 的组合

我只是有一个非常有趣的想法:使用生成器作为谓词和 .map() 和 filter() 之间的组合yield from。简而言之,代码如下:

def map_filter(function, iterable):
    """convert and filter a sequence"""
    for i in iterable:
        yield from function(i)
Run Code Online (Sandbox Code Playgroud)

现在,怎么回事?基本上,这是上述两个函数的组合,融合了它们的功能。实际上,仍然缺少传递附加参数的可能性map(),尽管这是一个小细节,恕我直言,它可以为此进行扩展。这是一个比较,生成数字的平方:

def function(x):
    return x * x
res = map(function, range(0, 10))
print(list(res))

def function(x):
    yield x * x
res = map_filter(function, range(0, 10))
print(list(res))
Run Code Online (Sandbox Code Playgroud)

这是另一个过滤奇数的例子:

def function(x):
    return x % 2 == 1
res = filter(function, range(0, 10))
print(list(res))

def function(x):
    if x % 2 == 1:
        yield x
res = map_filter(function, range(0, 10)) …
Run Code Online (Sandbox Code Playgroud)

python

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

给定N个整数和整数y,确定N中是否存在两个元素,其绝对差值等于y

我遇到了这个问题,我坚持这个.它说,

给定整数的集合N和整数Y,确定是否存在退出于N的绝对差等于y和同时打印这些数字的两个元素.该算法应该花费O(n lg n)时间.证明您的算法在O(n lg n)时间内运行的原因.例如,设N = 3,7,2,1,4,10 y = 1,N中有三对元素,其绝对差为1对1 = | 3 - 2 | = | -1 | = 1对2 = | 3 - 4 | = | -1 | = 1对3 = | 2 -1 | = 1

我在C++中尝试了如下,但它没有处理所有的边界情况,例如如果y = 8,对于上面的例子,它不打印任何东西,但它应该打印(2,10).

vector<int> printPairs(vector<int> N1, vector<int> N2, int y){
    int a = 0, b = 0;
    vector<int> result;
    while (a < N1.size() && b < N2.size()){
        if (N1[a] < N2[b]){
            result.push_back(N1[a]);
            if (abs(N1[a] - N2[b]) == y) …
Run Code Online (Sandbox Code Playgroud)

c++ arrays algorithm

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

取消引用数组地址不起作用?

考虑以下代码:

int myArray [3] = {1, 2, 3};

std::cout << myArray << "\n"; // 0x22ff24
std::cout << &myArray << "\n"; // 0x22ff24
std::cout << *myArray << "\n"; // 1
std::cout << *(&myArray) << "\n"; // 0x22ff24
Run Code Online (Sandbox Code Playgroud)

为什么底部语句不给1,就像第三个语句一样?如果myArray等于&myArray,为什么*myArray不等于*(&myArray)?

c++ arrays

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

如何提高多线程效率?

简要回顾:我有一个 C++ 多线程数独求解器,我想提高效率,我需要你的帮助。

我正在 C++ 中的多线程中实现一个蛮力数独求解器。主要结构是一棵树,所有逻辑是这样的:我开始读取输入中的初始矩阵,这将是我的根节点,然后我找到第一个空单元格,我找到所有可能适合该位置的数字,然后对于每种可能性,我都会创建父节点的一个子节点,以便每个节点对于每个可能的数字都有一个子节点。树以这种方式继续增长,直到遇到一个解决方案,即一个节点没有更多的空闲单元(所以它是满的),并且节点网格满足数独的所有规则。

我尝试在多线程中像这样实现这个算法:我按照上面的逻辑顺序执行完全相同的逻辑,但每次都执行一个步骤,存储我遇到的所有孩子直到那一刻(每个孩子都是一条路径,所以是一棵树)在一个向量中。如果孩子少于用户选择的线程,那么我会按顺序解决它们,然后再做一步(孩子会长大)。当我的孩子多于线程时,我会为每个线程拆分孩子,然后用他的部分(即一棵树)开始每个线程。

现在,考虑到“蛮力”方法和“仅标准库”要求是强制性的,所以我不能以不同的方式做,但我当然可以改变如何实现这一点的逻辑。

问题是:我怎样才能提高这个程序的效率?欢迎所有仅使用 std lib 的建议。

#define UNASSIGNED 0
#define N 9
#define ERROR_PAIR std::make_pair(-1, -1)

using namespace std;

atomic<bool> solutionFound{false};

//Each node has a sudokuMatrix and some sub-trees
struct Node {
    vector<vector<int>> grid;
    vector<Node *> child;
};


Node *newNode(const vector<vector<int>> &newGrid) {
    Node *temp = new Node;
    temp->grid = newGrid;
    return temp;
}

//Check if a number can be inserted in a given position
bool canInsert(const int &val, const int &row_, const int …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading

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

Bazel 的 Mingw-w64 工具链 (Ubuntu 20.04.1 )

我正在尝试使用 Bazel 在 Ubuntu 上为 mingw-w64 创建工具链。我正在关注本教程:https://docs.bazel.build/versions/master/tutorial/cc-toolchain-config.html。但是,当我尝试将编译器的路径调整为 mingw64 安装的路径时,出现以下错误:

bazel build --config=mingw_config -s //main:hello-world --verbose_failures
Starting local Bazel server and connecting to it...
INFO: Analyzed target //main:hello-world (16 packages loaded, 46 targets configured).
INFO: Found 1 target...
SUBCOMMAND: # //main:hello-world [action 'Compiling main/hello-world.cc', configuration: a79594d39f0782b210e102e89b8a67dda26e295f95805aa9c0140f6281fdd3f5, execution platform: @local_config_platform//:host]
(cd /home/federica/.cache/bazel/_bazel_federica/fb36143429cca4c38e61a5e83150e333/execroot/__main__ && \
  exec env - \
    PATH=/home/federica/.cache/bazelisk/downloads/bazelbuild/bazel-3.5.0-linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin \
    PWD=/proc/self/cwd \
  /usr/bin/x86_64-w64-mingw32-gcc -MD -MF bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.d '-frandom-seed=bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o' -iquote . -iquote bazel-out/k8-fastbuild/bin -iquote external/bazel_tools -iquote bazel-out/k8-fastbuild/bin/external/bazel_tools -c main/hello-world.cc -o bazel-out/k8-fastbuild/bin/main/_objs/hello-world/hello-world.o)
SUBCOMMAND: …
Run Code Online (Sandbox Code Playgroud)

c++ ubuntu mingw-w64 bazel

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