小编Dan*_*vil的帖子

我们应该通过引用还是通过值传递shared_ptr?

当一个函数采用shared_ptr(来自boost或C++ 11 STL)时,你传递它:

  • 通过const引用: void foo(const shared_ptr<T>& p)

  • 或按价值:void foo(shared_ptr<T> p)

我更喜欢第一种方法,因为我怀疑它会更快.但这真的值得吗还是还有其他问题吗?

您能否说出您选择的原因或案例,为什么您认为无关紧要.

c++ boost shared-ptr c++11

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

一起计算sin和cos的最快方法是什么?

我想一起计算一个值的正弦和正弦值(例如创建一个旋转矩阵).当然我可以一个接一个地分别计算它们a = cos(x); b = sin(x);,但我想知道在需要两个值时是否有更快的方法.

编辑: 总结到目前为止的答案:

  • 弗拉德说,有asm命令FSINCOS计算它们(几乎与FSIN单独呼叫同时)

  • Chi注意到的那样,这种优化有时已经由编译器完成(当使用优化标志时).

  • 咖啡厅指出,其功能sincossincosf可能是可用的,并且可以通过只包括直接调用math.h

  • 讨论使用查找表的 tanascius方法存在争议.(但是在我的计算机和基准测试场景中,它运行速度比sincos32位浮点几乎相同的速度快3倍.)

  • Joel Goodwin与一种极其快速近似技术的有趣方法相关联,具有相当好的准确性(对我来说,这比查表更快)

c c# c++ algorithm math

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

我在哪里可以找到.NET中的"钳位"功能?

我想将一个值钳位x到一个范围[a, b]:

x = (x < a) ? a : ((x > b) ? b : x);
Run Code Online (Sandbox Code Playgroud)

这是非常基本的.但是我没有在类库中看到函数"clamp" - 至少在类库中没有System.Math.

(因为不知道"钳制"一个值是为了确保它位于某些最大值和最小值之间.如果它大于最大值,则它被最大值替换,等等.)

c# clamp

84
推荐指数
6
解决办法
6万
查看次数

使用Eclipse/CDT调试C++代码时,可以更好地进行变量探索

使用Eclipse和CDT来调试C++代码,变量窗口很麻烦,对于标准模板库或boost中定义的类型(例如shared_ptr)而言,信息量不大.

只是一个例子,这对于std :: vector来说可能是这样的:

bar {...}   
    std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> > >   
        _M_impl {...}   
            std::allocator<TSample<MyTraits> >  {...}   
            _M_start    0x00007ffff7fb5010  
            _M_finish   0x00007ffff7fd4410  
            _M_end_of_storage   0x00007ffff7fd5010  
Run Code Online (Sandbox Code Playgroud)

即使关于这些类型的内部结构的这些信息可能有用,但在几乎任何情况下我都期望在这里有更清晰的表示,即std :: vector的值列表.是否有任何工具,插件或其他修改可以做到这一点?

编辑

以下解决方案不适用于Linux.我正在使用ubuntu 14.04,eclipse,g ++,gdb.

我找不到包gdb-python和linux不使用mingw

c++ eclipse gdb eclipse-cdt

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

如何加快g ++编译时间(使用大量模板时)

这个问题可能有些奇怪,但我怎样才能加快g ++编译时间?我的C++代码大量使用boost和模板.我已经尽可能多地从头文件中移动并使用-j选项,但是编译(和链接)仍需要很长时间.

是否有任何工具可以分析我的代码并指出编译器的瓶颈?或者可以以某种方式分析在我的代码上运行的编译器?这将是非常好的,因为有时我有这样的印象,我花了太多时间盯着编译器控制台日志...

c++ templates compilation g++

63
推荐指数
4
解决办法
4万
查看次数

如何同时迭代两个IEnumerables?

我有两个枚举:IEnumerable<A> list1IEnumerable<B> list2.我想同时迭代它们,如:

foreach((a, b) in (list1, list2))
{
    // use a and b
}
Run Code Online (Sandbox Code Playgroud)

如果它们不包含相同数量的元素,则应抛出异常.

做这个的最好方式是什么?

c# iteration ienumerable

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

如何使用linq找到最小值

我有一个class A { public float Score; ... }和一个,IEnumerable<A> items并希望找到A最低分.

使用items.Min(x => x.Score)给出最小分数而不是具有最小分数的实例.

如何只通过迭代一次数据来获取实例?

编辑:这么长时间有三个主要解决方案:

  • 编写扩展方法(由Svish提出).优点:易于使用和评估每个项目只有一次得分.缺点:需要扩展方法.(我为我的申请选择了这个解决方案.)

  • 使用Aggregate(由Daniel Renshaw提出).优点:使用内置的LINQ方法.缺点:对未经训练的眼睛略微混淆并且不止一次地给评估者打电话.

  • 实施IC Comparable(由网络化提出).优点:可以直接使用Linq.Min.缺点:固定为一个比较器 - 在执行最小计算时无法自由选择比较器.

c# linq

42
推荐指数
4
解决办法
5万
查看次数

在运行时指定模板参数

考虑以下模板类

class MyClassInterface {
public:
  virtual double foo(double) = 0;
}

class MyClass<int P1, int P2, int P3>
: public MyClassInterface {
public:
  double foo(double a) {
    // complex computation dependent on P1, P2, P3
  }
  // more methods and fields (dependent on P1, P2, P3)
}
Run Code Online (Sandbox Code Playgroud)

模板参数P1,P2,P3是在限制范围就像从0一些固定值n固定在编译时.

现在我想建立一个像"工厂"的方法

MyClassInterface* Factor(int p1, int p2, int p3) {
  return new MyClass<p1,p2,p3>(); // <- how to do this?
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在模板参数仅在运行时知道时如何实现模板类的构造.对于具有非常大的域(如双)的模板参数,同样可能吗?如果可能的解决方案可扩展到使用更多模板参数,请另请考虑.

c++ templates

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

链接时gcc可以使用多个内核吗?

因此,当使用GCC编译大量源文件时,可以使用-j来使用所有可用内核.但链接器怎么样?是否有类似的选项来加速链接或GCC不支持多线程?在一些较大的项目中,它可能需要一段时间......(......我讨厌等待!)

编辑:感谢您指出-j是make的选项,而不是gcc/g ++.但这不能回答我的问题!我想知道gcc是否可以在链接程序时使用多线程!

linker gcc

28
推荐指数
4
解决办法
8025
查看次数

如何处理"无限"IEnumerable?

"无限"IEnumerable的一个简单例子

IEnumerable<int> Numbers() {
  int i=0;
  while(true) {
    yield return unchecked(i++);
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道

foreach(int i in Numbers().Take(10)) {
  Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

var q = Numbers();
foreach(int i in q.Take(10)) {
  Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

两者都工作正常(并打印数字0-9).

但复制或处理表达式时是否有任何陷阱q?我可以依赖这样一个事实,即它们总是被评估为"懒惰"吗?产生无限循环有危险吗?

c# enumeration infinite-loop yield-return

26
推荐指数
3
解决办法
3935
查看次数