小编Dar*_*nor的帖子

如何使用C++避免在其中使用"if"条件的"for"循环?

几乎所有我编写的代码,我经常处理集合中的集合减少问题,最终会在它们内部产生天真的"if"条件.这是一个简单的例子:

for(int i=0; i<myCollection.size(); i++)
{
     if (myCollection[i] == SOMETHING)
     {
           DoStuff();
     }
}
Run Code Online (Sandbox Code Playgroud)

使用函数式语言,我可以通过将集合减少到另一个集合(轻松)来解决问题,然后在简化集上执行所有操作.在伪代码中:

newCollection <- myCollection where <x=true
map DoStuff newCollection
Run Code Online (Sandbox Code Playgroud)

在其他C变体中,比如C#,我可以使用where子句来减少

foreach (var x in myCollection.Where(c=> c == SOMETHING)) 
{
   DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

或者更好(至少在我看来)

myCollection.Where(c=>c == Something).ToList().ForEach(d=> DoStuff(d));
Run Code Online (Sandbox Code Playgroud)

诚然,我做了很多范例混合和主观/意见为主的风格,但我不禁觉得我失去了一些东西真的很基本的,可以让我利用这个最佳技术和C++.有人可以开导我吗?

c++ c++11 c++14

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

单身释放方法产生警告?

在我的单例发布方法中,我没有做任何事情:

-(void) release {
  //A whole lot of nothing.
}
Run Code Online (Sandbox Code Playgroud)

但它产生了这个警告:

警告:在'release'的实现中返回类型上的分布式对象修饰符冲突

我用谷歌搜索,看到其他人有同样的错误,但没有解释警告.有谁知道警告是关于什么的?

warnings objective-c

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

您如何管理和使用"多对多"核心数据关系?

我正在创建一个应用程序并尝试使用核心数据,因为它似乎是目标C批准的创建数据存储系统的方式.我使用的用例涉及"多对多"关系,就像您通常在标准SQL系统中看到的那样.我理解目标C不是数据库,而且工作方式不同.我还在这里查看了文档:

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW10

还有其他几个地方.然而,我仍然遇到麻烦.有人可以向我解释如果你有一个需要使用SQL交叉引用表的用例你会怎么做?例如:

经理人| 雇员

经理可能有几名员工,但员工可能还有几位经理.在SQL中,我创建了一个交叉引用表,然后使用它.

示例:http://www.tomjewett.com/dbdesign/dbdesign.php?page = manymany.php

有人可以解释你如何在核心数据中做到这一点?

根据核心数据文档,他们说:

"您使用两对多关系定义多对多关系.第一对多关系从第一个实体到第二个实体.第二个到多个关系从第二个实体到第一个实体.然后将每个设置为另一个的倒数.(如果您有数据库管理的背景,这引起您的关注,请不要担心:如果您使用SQLite存储,Core Data会自动为您创建中间连接表.) "

但是,除了"不担心"之外,我不知道这怎么可能起作用?

sqlite iphone core-data objective-c

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

装饰器,属性,方面和特征之间有什么区别?

从纯计算机科学(或计算语言学)的角度来看,我想知道这些词之间的区别:

  • 装饰
  • 属性
  • 方面
  • 特征

各种语言以不同的方式使用这些单词和功能.在Python中,例如,Decorators [根据Python Wiki](强调我的):

装饰器动态地改变函数,方法或类的功能,而不必直接使用子类或更改正在装饰的函数的源代码.

这让我感觉非常类似于面向方面的编程工具,如PostSharp或DynamicProxy.即:

   [Profile]
   private static void SleepSync()
   {
       Thread.Sleep(200);
   }
Run Code Online (Sandbox Code Playgroud)

来源:PostSharp示例

在C#和Java(以及无数其他语言)中,属性可以表示Decorator-ish模式(C#)或字段(Java).

在C++中通过boost或PhP通过内置特征词,我们可以使用特征来扩展类,如下所示:https://en.wikipedia.org/wiki/Trait_ (computer_programming)

因此,从"纯粹"的角度来看,所有这些实际上是什么的规范定义是什么?有没有更好的方法来定义它们?

theory computer-science decorator traits aspect

16
推荐指数
1
解决办法
2435
查看次数

GMP整数的位数

有没有一种简单的方法来确定GMP整数的位数?我知道你可以通过日志来确定它,但我想知道库中是否有一些我缺少的东西.我在手册中找到的唯一一件事是:

_mp_size肢数,或表示负整数时的负数.零由_mp_size设置为零表示,在这种情况下_mp_d数据未使用.

但我的印象与我正在寻找的完全不同.

124839 = 6位数.

c++ integer biginteger gmp

15
推荐指数
1
解决办法
4201
查看次数

你如何在DirectX 11中绘制文本?

在DirectX 10中,您可以使用D3DX10提供的字体界面.在DirectX 11中,您应该使用DirectWrite.但看起来DirectWrite本身并不能说Direct3D?有什么基本的东西我不见了吗?如何使用DirectX 11绘制简单文本?

c++ directx directx-11

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

什么是学习着色器程序的最佳工具?

我最近一直在做一些DirectX 10工作,我正在寻求转向DirectX 11和Shader Model 5.0.我过去曾写过一些非常简单的着色器,我正在寻求拓宽视野,开拓更复杂的着色器.我的问题有点多重:

  1. 什么是编程着色器的最佳工具?我只使用了visual studio和SOME FX作曲家 - 阅读:足以打开它并查看它.

  2. gfx卡的品牌是否会影响您可以编程的着色器类型?

    • 我问的原因是,似乎Nvidia有更好的工具,ATI似乎取消了RenderMonkey.我似乎没有看到任何替代品?我错了吗?
  3. 排序与#1相同的问题,但如果您打算编写DirectX着色器而非特定于供应商,是否可以使用跨供应商工具?

    • 如果您需要针对特定​​供应商,Nvidia通常会有更好的工具吗?我现在真的很喜欢ATI,因为它们似乎是最好的降压(我有一块AMD主板) - 但我犹豫不决,因为我主要使用我的gfx卡进行编程.

c++ directx shader directx-10

14
推荐指数
1
解决办法
1619
查看次数

为什么Doom3会切换列和行主矩阵?

我一直在勇敢地试图弄清楚厄运3的源代码.我偶然发现的一件事是在整个解决方案中使用的矩阵类.这是一个相当简单的代码,但我做出的决定是我无法理解的.他们决定将Column和Major行专业混合使用不同的尺寸.

  • 3x3矩阵是专栏
  • 每隔一个矩阵都是行专业(我想 - 还没有全部检查过)

有谁知道为什么可能做出这个决定?由于OpenGL是专栏专业,我认为只使用专业列是有意义的吗?

c++ opengl

12
推荐指数
1
解决办法
1253
查看次数

OpenGL的GLM库是否没有幅度函数?

我是新手使用GLM库,但看起来它没有幅度函数.它是否正确?如果是这样,那么推理是什么?

c++ opengl glm-math

10
推荐指数
1
解决办法
9843
查看次数

在C ++中,有没有权威的方法可以防止“移动后使用”错误?

我发现这些错误对于开发人员来说太容易了。是否有最佳实践或权威方法来避免这种情况?是否有可在多个平台上使用的编译器标志或提示?

c++ c++11

9
推荐指数
1
解决办法
384
查看次数