在教程中,有些东西让我感到困惑.准确地说,整数除法.
看似首选的方法是将除数转换为浮点数,然后将浮点数舍入为最接近的整数,然后将其转换为整数:
#include <cmath>
int round_divide_by_float_casting(int a, int b){
return (int) std::roundf( a / (float) b);
}
Run Code Online (Sandbox Code Playgroud)
然而,这似乎是用右手刮伤你的左耳.我用的是:
int round_divide (int a, int b){
return a / b + a % b * 2 / b;
}
Run Code Online (Sandbox Code Playgroud)
这不是突破,但它不标准的事实让我想知道我是否遗漏了什么?尽管我(尽管有限)测试,我找不到任何两种方法给我不同结果的情况.是否有人遇到某种情况,其中int-> float-> int cast产生了更准确的结果?
这可能是一个更高级的问题.如果你有两个返回值的函数
int F(int input1, int input2)
{
int output;
//some algorithm that assigns value to output//
return output;
}
int D(int input1, int input2)
{
int output;
//another algorithm that assigns value to output//
return output;
}
Run Code Online (Sandbox Code Playgroud)
条件是F(a,b)== D(a,b)(对于相同的输入都返回相同的值).
如果你想对他们的表现进行基准测试,你会怎么做?更准确地说,你会如何孤立它需要执行时间F(A,B)或d(A,B)等,它并不能反映它花费的时间等在基准设置二次操作?
这可能是一个新问题(我),但我已尽可能多地搜索以找到解决以下问题的方法
我有以下场景(当然很重要):
class Container
{
std::vector<Object> obj;
};
class Pointers
{
std::vector<Object*> obj_ptr;
};
Run Code Online (Sandbox Code Playgroud)
我有一个例程,它将Object类型的元素推回到Container中的向量obj,然后将指向同一元素的指针推回到obj_ptr.
整个想法是obj_ptr [i] == &obj [i]在整个程序的整个生命周期.
我遇到的问题是,每当obj的容量需要增加所有指针都无效时,使obj_ptr完全无用.我使用最大预期大小(大约10 ^ 7)尝试了两个obj.reserve()并初始化具有相同大小的向量.问题仍然存在.
不确定它是否重要,但我正在使用VS 2015 Com.
谢谢!