小编pho*_*ger的帖子

如何重写复杂的C++代码行(嵌套三元运算符)

我一直在查看其他人的代码以进行调试,并发现:

!m_seedsfilter ? good=true : m_seedsfilter==1 ? good=newClusters(Sp) : good=newSeed(Sp);  
Run Code Online (Sandbox Code Playgroud)

这是什么意思?是否有一个自动化工具可以将其呈现为更易于理解的if/else语句?处理这样复杂控制结构的任何提示?

编辑注释:我将其从"不必要的复杂"更改为标题中的"复杂",因为这是一个意见问题.到目前为止,感谢您的所有答案.

c c# c++

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

如何将多个时间序列数据呈现给R中的SVM(ksvm)(或者,如何将二维输入数据呈现给SVM)

如何让ksvm模型知道数据集中的前100个数字是来自一个传感器的所有时间序列数据,而接下来的100个数字是来自另一个传感器等的所有时间序列数据,用于六个独立的时间序列传感器输入?或者(也许更一般地),如何向SVM呈现二维输入数据?

我需要二进制是/否预测模型的过程具有六个非周期时间序列输入,所有输入具有相同的采样频率.事件触发数据收集的开始,并且在预定时间之后我需要是/否预测(优选地包括正确性概率输出).应该产生"是"与"否"的时间序列输入的特征是未知的,但是已知的是在每个输入时间序列数据和最终结果之间应该存在某种相关性.所有输入都存在明显的噪音.有意义的信息和噪声都作为短持续时间突发出现在输入上(有意义的突发总是在给定输入源的相同的一般时间内),但是识别哪些突发是有意义的以及哪些是噪声是困难的; 即,对于一个输入在"正确"时间发生突发的事实不一定表示"是"输出; 它可能只是噪音.要知道预测是否应为"是",模型需要以某种方式合并来自所有六个时间序列输入的信息.我收集了大约900'不'结果和100'是'结果的先前数据.

我对R和SVM 都很陌生,但我想我想使用SVM模型(kernlab的ksvm).我无法弄清楚如何向其提供输入数据.我也不知道如何告诉ksvm数据是时间序列数据,或者是否相关.我尝试使用Rattle GUI前端来从R中提取我的数据来自csv文件,但我无法弄清楚如何将所有六个输入的时间序列数据呈现到ksvm模型中.作为csv文件输入,似乎导入所有1000个样本的数据的唯一方法是组织输入数据,使得所有样本数据(对于所有六个时间序列输入)都在csv文件的单行上,在csv文件的每一行上显示单独的已知结果文件的数据.但是这样做,第一个,第二个,第三个等数字是来自第一个传感器的时间序列数据的每个部分的事实在翻译中丢失,以及第101,102,123等事实数字是来自第二传感器的时间序列数据的每一部分,依此类推; 对于ksvm模型,每个数据样本只被认为是与其邻居无关的孤立数字.如何将这些数据作为六个独立但相互关联的时间序列数组提供给ksvm?或者我如何向ksvm提供二维数据数组?


更新:

好吧,有两个基本的策略我尝试过惨淡的结果(好吧,结果模型比盲猜更好,但不多).

首先,不熟悉R,我使用了Rattle GUI前端到R.我有一种感觉,通过这样做,我可能会限制我的选择.但无论如何,这就是我所做的......

示例已知结果文件(仅显示4个传感器而不是6个传感器,仅显示7个时间样本而不是100个):

training168_yes.csv

Seconds Since 1/1/2000,sensor1,sensor2,sensor3,sensor4
454768042.4,           0,      0,      0,      0
454768042.6,           51,     60,     0,      172
454768043.3,           0,      0,      0,      0
454768043.7,           300,    0,      0,      37
454768044.0,           0,      0,      1518,   0
454768044.3,           0,      0,      0,      0
454768044.7,           335,    0,      0,      4273
Run Code Online (Sandbox Code Playgroud)

training169_no.csv

Seconds Since 1/1/2000,sensor1,sensor2,sensor3,sensor4
454767904.5,           0,      0,      0,      0
454767904.8,           51,     0,      498,    0
454767905.0,           633,    0,      204,    55
454767905.3,           0,      0,      0, …
Run Code Online (Sandbox Code Playgroud)

r time-series svm kernlab

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

SPARC的GCC内联汇编:如何处理整数双字对?

据我所知,在SPARC中,32位整数存储在单个寄存器中,64位整数存储在相邻寄存器对中,偶数寄存器包含高32位,奇数寄存器包含低32位.

我需要编写一些专门的SPARC内联汇编宏(内联汇编函数也可以)处理64位整数双字对,我无法弄清楚如何一般地引用(使用GCC扩展内联汇编)到我的内联装配中两半的一对.虽然我的汇编宏比下面显示的MULTIPLY()宏稍微复杂一些,但乘法示例(如果有效)将演示如何处理64位双字对的两半.谁能告诉我如何修复我的MULTIPLY()宏?

万一重要,我正在......

bash-2.03 $ uname -a
SunOS [...] 5.8 Generic_117350-39 sun4u sparc SUNW,Ultra-80

这是我的简单示例程序(在C中):

#include <stdio.h>
//#include <stdint.h>
#define uint32 unsigned long int
#define uint64 unsigned long long int


#define MULTIPLY(r, a, b)  /* (r = a * b) */   \
   asm("umul %1, %2, %0;"  /* unsigned mul */  \
       : /* regs out */  "=h"(r)               \
       : /* regs in  */  "r"(a),   "r"(b));
#if 0
       : /* clobbers */  "%y" );
#endif


int main(int argc, char** argv)
{ …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc sparc inline-assembly

5
推荐指数
1
解决办法
2215
查看次数

VC++注释,文档和IntelliSense

在C#中,我评论这样的方法:

    /// <summary>
    /// Does absolutely nothing
    /// </summary>
    /// <param name="a">First useless parameter</param>
    /// <param name="b">Second useless parameter</param>
    /// <returns>zero</returns>
    public int Foo(int a, int b)
    {
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

这提供了非常好的IntelliSense提示窗口:

在此输入图像描述

什么,如果有的话,在Visual C++或(甚至更好)的解决方案中是等效的,可以在其他IDE如XCode或Eclipse中使用?

更新

我发现了类似的问题,但是@ edtheprogrammerguy的答案有很好的参考,所以我将把questino放在这里.此外,SO不会让我删除我的问题.

更新第二个

许多C#XML注释(<summary>例如)开箱即用.这会是很好,如果///注释自动插入必需的summary,param并且returns标签,但我想,这将会是很容易用新的代码片段来实现.

更新第三个

这是一个插入标题的代码片段.它不扫描方法参数列表,但它是一个很好的开始.保存Documents\Visual Studio 2012\Code Snippets\Visual C++\My Code Snippets为带.snippet扩展名的任何内容,重新启动VS,然后summ在方法上方键入+ TAB 激活.

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>SnippetFile1</Title>
      <Author>dlively</Author> …
Run Code Online (Sandbox Code Playgroud)

c++ intellisense comments visual-c++

5
推荐指数
1
解决办法
3400
查看次数

使用as.factor()的R公式:任何方式将参数指定为变量内容而不是直接按名称?

为了下面的讨论,我将创建这个假的训练数据框:

> dataset = data.frame(result=c("yes","yes","no","no","no"),
                       s1=seq(0,8,2), s2=seq(1,9,2))
> dataset
  result s1 s2
1    yes  0  1
2    yes  2  3
3     no  4  5
4     no  6  7
5     no  8  9
> 
Run Code Online (Sandbox Code Playgroud)

我正在尝试从类似于上面所示的多个数据帧训练多个kernlab KSVM模型.result实际上,对于每个数据框,该列的名称都是不同的(它是根据该数据集训练的模型应该预测的名称命名的).

我仍然是R的新手,所以我正在使用的语法只是在我从Rattle的日志选项卡中剪切和粘贴的代码之后建模(没有双关语):

trainedModel = ksvm(as.factor(result) ~ ., data=dataset[,c(input, target), ...)
Run Code Online (Sandbox Code Playgroud)

... ... 数据框中result列的名称dataset.我明白这as.factor(result) ~ .是一个公式,这意味着它的左侧的东西~是以某种方式从右侧的东西中得到的~,而这.只是意味着"其他一切未在左侧指定的~".至少我认为这意味着什么.

我的问题是我希望能够以编程方式创建和训练这些模型,并且输入数据集中目标列的名称将会改变.

如何在代码中指定"colnames(dataset)[1]"(即,在编码时不知道列名称的情况动态确定列的名称)as.factor(result)

r

5
推荐指数
1
解决办法
916
查看次数

如何制作TortoiseSVN diff .dot和.dotx Word模板文件

TortoiseSVN具有惊人的能力来区分Microsoft Word文档修订版,显然可以通过C:\Program Files\TortoiseSVN\Diff-Scripts调用MS Word来执行diff 的脚本(而不是使用TortoiseMerge将它们作为文本文件进行区分,这当然不适用于Word)文件).MS Word本身能够区分两个版本的.dot或.dotx文件,使用相同的用户界面"点击"来区分两个版本的.doc或.docx文件,所以看起来像.doc和.doc的TortoiseSVN脚本. docx files(diff-doc.js)也适用于.dot和.dotx文件.

在尝试启用TortoiseSVN来区分.dot和.dotx文件时,我编辑了第一行diff-doc.js...

// extensions: doc;docx;docm
Run Code Online (Sandbox Code Playgroud)

......对此:

// extensions: doc;docx;docm;dot;dotx
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用TortoiseSVN将.dot文件与其先前版本区分开来,并且它的行为与以前相同(TortoiseMerge抱怨它不是有效的文本文件).想想也许TortoiseSVN只extensions在启动时检查脚本文件中的注释,我重新启动,并且仍然是相同的行为.

我错过了制作TortoiseSVN diff .dot&.dotx文件所需的东西吗?(顺便说一句,我知道.dot扩展名被其他程序用于与MS Word无关的事情,我知道这会使.dot扩展名的文件在其真实文件格式方面不明确.)

svn tortoisesvn

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

这是编译器错误吗?

我的几乎微观的基于8051的嵌入式系统有一个调试串口,我写了一个简单的串口输出功能,它运行正常,直到我做了一些小的调整,以减少其内存占用.然后是以下行,哪个WAS工作正常(并且不是更改的一部分)......

dbg_TxBuf[(dbg_TxBufProduceCount++) & (sizeof(dbg_TxBuf) - 1)] = ch;
Run Code Online (Sandbox Code Playgroud)

......停止了正常工作 变量dbg_TxBufdbg_TxBufProduceCount全局变量,仅由输出函数和串行端口ISR使用(根本没有更改):

#define DBG_TX_BUFFER_SIZE 16 // MUST be a power-of-2 (this line is actually in a separate file, not that it matters)
volatile uint8_t xdata dbg_TxBuf[DBG_TX_BUFFER_SIZE]; // must be sized by a power-of-2, and MUST BE LESS THAN 256 since the 'count' vars are uint8
volatile uint8_t xdata dbg_TxBufProduceCount; // akin to a 'head' index but more useful since it allows use of every byte in the buf …
Run Code Online (Sandbox Code Playgroud)

c

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

具有不同范围的其他相同名称的C++名称解析规则

我意识到以下是可怕的风格,但为了争论,假设我有以下代码:

struct parent
{
   virtual ~parent() {}
};

struct child : public parent
{
   child() {}
   virtual ~child() {}
};

struct anotherClass
{
   static parent& anyName;
};

child anyName; // create an instance of 'child'
parent& anotherClass::anyName = anyName; // create a parent-class ref to the child object
Run Code Online (Sandbox Code Playgroud)

当我初始化anotherClass::anyName上面的参考时,我用anyNameanyName初始化它?子类对象,还是自己?(anyName最后一行中的最后一个实体引用哪个实体?它是不明确的吗?)在C++规范中,这样的地方会被解决吗?

(顺便说一句,这个问题与我几分钟前发布的其他问题完全无关.)

c++ language-lawyer name-lookup

3
推荐指数
1
解决办法
107
查看次数

如何从Linux"find"命令的输出中排除与某些模式匹配的目录?

我想用Linux的find命令使用正则表达式递归地潜入一个庞大的目录树,向我展示所有.c,.cpp和.h文件,但省略包含某些子串的匹配.最后,我想将输出发送到xargs命令,对所有匹配文件进行某些处理.我可以find通过grep 管道输出以删除包含这些子串的匹配,但该解决方案对包含空格的文件名不能很好地工作.所以我尝试使用find's -print0选项,它使用nul char而不是换行符(空格)终止每个文件名,并使用xargs -0期望nul-delimited输入而不是空格分隔的输入,但我无法弄清楚如何通过find管道grep过滤器成功通过nul-delimited ; grep -Z在这方面似乎没有帮助.

所以我想我会写一个更好的正则表达式find并取消中间grep过滤器...或许sed会是另类?

在任何情况下,对于以下小目录的目录......

./barney/generated/bam bam.h
./barney/src/bam bam.cpp
./barney/deploy/bam bam.h
./barney/inc/bam bam.h
./fred/generated/dino.h
./fred/src/dino.cpp
./fred/deploy/dino.h
./fred/inc/dino.h
Run Code Online (Sandbox Code Playgroud)

...我希望输出包含所有.h,.c和.cpp文件,但不包括那些出现在'generated'和'deploy'目录中的文件.

顺便说一下,你可以创建一个完整的测试目录(名为fredbarney)来测试这个问题的解决方案,方法是将整个行剪切并粘贴到你的bash shell中:

mkdir fredbarney; cd fredbarney; mkdir fred; cd fred; mkdir inc; mkdir docs; mkdir generated; mkdir deploy; mkdir src; echo x > inc/dino.h; echo x > docs/info.docx; echo x > generated/dino.h; echo x > deploy/dino.h; echo x > …
Run Code Online (Sandbox Code Playgroud)

regex linux bash grep

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

C#泛函函数实现isPowerOf2 <T>(T x)

在C++中,我经常使用这个模板化函数......

template<typename T>
bool isPowerOf2 (T x) // returns nonzero if x is a power-of-2
{
  return x && ((x & (~x + 1)) == x);
}
Run Code Online (Sandbox Code Playgroud)

...而且我正在尝试在C#中实现相同的功能.所以这是我能想到的最好的:

public class Utils
{
   // ...

   public static bool isPowerOf2<T>(T x) // returns true if x is a power-of-2
   {
      return (x != 0) && ((x & (~x + 1)) == x);
   }
}
Run Code Online (Sandbox Code Playgroud)

但Visual Studio抱怨error CS0019: Operator '!=' cannot be applied to operands of type 'T' and 'int'error …

c# generics

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

如何从各种未知的数字类型转换为double

我的代码将从各种数字类型的各种来源获取大量数据,这些数据都以类型形式到达object,为了便于使用,我想将它全部转换为double类型(这足以代表完整输入数据的范围,并且不需要极高的精度).我当然能够解决这个问题,但我的解决方案似乎很笨重....

  List<object> list = new List<object>();

  list.Add((int)42);
  list.Add((short)42);
  list.Add((float)42.1);
  list.Add((double)42.1);
  list.Add((decimal)42.1);

  foreach (object valObj in list)
  {
     Type objType = valObj.GetType();
     double value;

     if      (objType == typeof(int))     { value = (double)(int)valObj;     }
     else if (objType == typeof(short))   { value = (double)(short)valObj;   }
     else if (objType == typeof(float))   { value = (double)(float)valObj;   }
     else if (objType == typeof(double))  { value = (double)valObj;          }
     else if (objType == typeof(decimal)) { value = (double)(decimal)valObj; }
     else throw new Exception("Unexpected …
Run Code Online (Sandbox Code Playgroud)

c#

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

如何在menuconfig中找到Linux配置选项?

各种网页告诉我要在Linux内核中获得完全真实的堆栈回溯,我需要CONFIG_FRAME_POINTER=y在我的.config文件中设置.所以我跑步make menuconfig并尝试在那里找到它,但是在哪里导航这样做几乎不直观.我搜索网页并找到许多说要启用它的页面,但是没有页面告诉我要进行深入研究的菜单选项.所以我想也许我可以运行make config,只需按[Enter]一百万次来选择所有内容的当前配置选项,然后将整个命令窗口缓冲区内容复制粘贴到文本文件中并搜索(不区分大小写)"frame_pointer"或"框架指针",但仍然没有运气; 显然我必须为某些子菜单选择'y',甚至可以深入到任何地方.

如何在config或menuconfig中找到这样的选项?是否在某处列出了选项配置层次结构?

更新:

我正在使用Linux Kernel v2.6.30.4-uc0; 这就是我使用Lantronix XPort Pro SDK的原因.

根据我得到的答案,我使用/搜索选项(不知道我之前是如何错过的),但我真的无法进一步了解.当我搜索"FRAME_POINTER"时,这就是我所看到的:

Symbol: ARCH_WANT_FRAME_POINTERS [=n]

Symbol: FRAME_POINTER [=n]
 Prompt: Compile the kernel with frame pointers
   Defined at lib/Kconfig.debug:620
   Depends on: DEBUG_KERNEL && (CRIS || M68K || M68KNOMMU || FRV || UML || AVR32 || SUPERH || BLACKFIN || MN10300) || ARCH_WANT_FRAME_POINTERS
   Location:
     -> Kernel hacking
   Selected by: LOCKDEP && DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT && !MIPS && !PPC …
Run Code Online (Sandbox Code Playgroud)

linux-kernel embedded-linux

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

在源文件(而不是头文件)中使用 __attribute__((noinline)) 有什么意义吗?

我公司的一些程序员已经开始__attribute__((noinline))在我们的代码中(头文件和源文件中)添加方法。我们不使用整个程序优化。在我看到的绝大多数情况下,这些方法不会调用同一源文件(“翻译单元”)中的其他方法;这些“noinline”方法的唯一调用者(在大多数情况下)是其他源文件中的方法。

我想指出的是,这些__attribute__((noinline))属性标记没有做任何事情,只会让我们的代码变得混乱,但在我这样做之前,我只想验证一下我是对的:

如果方法的定义(代码体)是...,则将方法标记为“noinline”是否有任何好处?

  • 在源(.c 或 .cpp)文件中
  • 未由该源文件中的任何其他方法调用
  • 并且没有使用整个程序优化

...?

即,在缺乏整个程序优化的情况下,编译器+链接器是否可以内联这样定义的方法(以上要点)?

c c++

0
推荐指数
1
解决办法
780
查看次数