小编Sto*_*sen的帖子

已知整数值的快速优雅的单向映射

我必须将一组已知整数映射到另一组已知整数,1对1关系,所有预定义等等.所以,假设我有这样的东西(c ++,简化,但你会得到这个想法):

struct s { int a; int b; };

s theMap[] = { {2, 5}, {79, 12958 } };
Run Code Online (Sandbox Code Playgroud)

现在给出一个输入整数,比如79,我需要从Map中找到相应的结果(显然是12958).任何好的和快速的方法,而不是你的普通循环?其他数据结构建议也是受欢迎的,但地图应该易于手工编写.

两组中的值在0到2 ^ 16的范围内,并且仅有大约130对.我也追求的是一种静态初始化数据的简单方法.

c++

6
推荐指数
3
解决办法
2484
查看次数

memcpy部分复制自己

这个可以吗?

char buf[] = { 0, 1, 2 };
memcpy(buf, buf + 1, 2);
Run Code Online (Sandbox Code Playgroud)

有更大的数据类型有什么区别吗?我知道我可以使用memmove(),但我只是好奇.

c memcpy

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

Visual Studio C++编译器优化打破代码?

我在这里遇到了一个奇怪的问题,VS2005和2010都有.我有一个for循环,其中调用了一个内联函数,本质上是这样的(C++,仅用于说明目的):

inline double f(int a)
{
  if (a > 100)
  {
    // This is an error condition that shouldn't happen..
  }

  // Do something with a and return a double
}
Run Code Online (Sandbox Code Playgroud)

然后是另一个函数的循环:

for (int i = 0; i < 11; ++i)
{
  double b = f(i * 10);
}
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是,在调试构建中一切正常.在发布所有优化的发布版本中,这是根据反汇编编译的,因此i直接使用而没有* 10和比较a > 100变成a > 9,而我想它应该是a > 10.你有什么线索可以让编译器认为这a > 9是正确的方法吗?有趣的是,即使是周围代码中的微小更改(例如调试打印输出)也会使编译器使用i * 10并将其与文字值100进行比较.

我知道这有点模糊,但我会感激任何旧想法.

编辑:

这是一个有希望可重复的案例.我不认为它太大而不能粘贴在这里,所以这里有:

__forceinline int …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-optimization visual-studio visual-c++

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