簡體   English   中英

問:“帶指示器的R”和“帶for的c ++”之間的速度

[英]Q. speed between “R with indicator” and “c++ with for”

我覺得以下R代碼的速度很好。 有什么方法可以使用C ++提高速度嗎? 我覺得我的C ++代碼沒有那么快。

#R-code
> s<-5
> t<-2
> y<-c(1,2,3,4,5)
> r<-c(1,5,5,3,3)
> 
> sindex<-r[r==s]
> tindex<-r[r==t]
> 
> 
> res<-sum(y[sindex])+sum(y[tindex])
> 
> sindex
[1] 5 5
> tindex
numeric(0)
> 
> res
[1] 10

#c++
res1=0; res2=0;
for(i=0;i<n;i++){
if(r[i]==s){
    res1=res1+y[s];
}
if(r[i]==t){
    res2=res2+y[t];
}
}
res=res1+res2

R中的矢量化(sum是矢量化函數)在后台運行C。 通常足夠快...

您可以嘗試以下方法:

res = 0;
for (i = 0; i < n; i++)
     if (r[i] == s || r[i] == t)
          res += y[i];   // y[s] or y[t] seems incorrect

不要期望它會更快。

(Q. 有點錯誤所以請檢查正文) C float *q=NULL; printf(“%f”,q); output 為 0.000000 但在 C++ 中 float *q=nullptr; cout&lt; <q; give output 0?< div><div id="text_translate"><p> <strong>[我的問題有點奇怪,但現在更改它是不對的,因為它得到了很好的解釋,但我正在使用 [Update].......[Update End] 標簽對其進行編輯,以避免對即將訪問我的訪問者造成混淆郵政]</strong></p><p> <strong>C</strong></p><pre> #include&lt;stdio.h&gt; int main() { float *q=NULL; printf("%f\n",q); }</pre><p> <strong>OUTPUT</strong></p><pre> 0.000000</pre><ul><li> 在 C output 為 0.000000</li><li> 所以這里 q 是浮點型 null 指針還是 q 是 (void *) 類型 null 指針?</li><li> 我覺得它是 (void *) 類型。</li><li> 因此格式(%f)和參數(void *)不匹配會調用未定義的行為並導致此類錯誤類型output</li></ul><p> <strong>[更新]</strong><strong>但是你會回答我自己的問題,我問的這么愚蠢的問題</strong></p><p>基本上我很困惑,我覺得我必須打印一些浮點類型或 void 類型,但關鍵是我正在打印地址,所以使用 %f 來打印地址只是愚蠢的。</p><p> 顯然 q 是浮點型指針,只是我覺得完全錯誤</p><p>通常我們使用 %u 來打印任何類型變量的地址(int,char,float)但是對於指針我們應該使用 %p</p><p> <strong>[更新結束]</strong></p><p> <strong>C++</strong></p><pre> #include&lt;iostream&gt; int main() { float *q=nullptr; std::cout&lt;&lt;q; }</pre><p> <strong>OUTPUT</strong></p><pre> 0</pre><ul><li> 在 C++ 中給出 output 0</li><li> 我認為這很好,因為它將第一個 memory 塊的地址指向任何內容</li><li>如果 q 是 nullptr_t 類型,那么 C++11 應該給出歧義錯誤意味着這里 q 是浮點類型 nullptr。</li></ul><p> <strong>[更新]</strong></p><p> C 和 C++ 標准都指定 null 指針常量比較等於零 - 他們沒有說明該地址的內容。</p><p> 顯然 q 只是浮點類型 nullptr</p><p> <strong>[更新結束]</strong></p><p> <strong>因此,如果我的兩個假設都是正確的,那么為什么在 C++ nullptr 中將其類型從 nullptr_t 更改為浮點類型,但在 C NULL 中將其類型更改為(void <em>)</em>不更改</strong>?</p><p> <strong>[更新]</strong></p><p> 我在 C 的第一個示例中的第一個假設 q 是 (void*) 類型已經是錯誤的,第二個假設是在第二個例子中。 C++ 的 q 是 nullptr_t 也是錯誤的。</p><p> 所以在這里總結一下</p><p>我試圖比較這發生在 C 和這發生在 c++ 我覺得這些事情是相互矛盾的</p><p>但實際上,在 C 中,我使用 %f 打印第一個錯誤的指針地址。 In C++ code all I think is all right except One thing that it is wrong to assume that null pointer points to 1st block of memory which is 0th as it is not specify in c standard it just say that nullptr constant compares to 0 when evaluate.</p><p> 這么多的錯誤只是問題,所以這不是正確的問題</p><p> <strong>[更新結束]</strong></p></div></q;>

[英](Q. is little wrong So please check body) C float *q=NULL; printf(“%f”,q) ; output is 0.000000 but in C++ float *q=nullptr; cout<<q; give output 0?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 (Q. 有點錯誤所以請檢查正文) C float *q=NULL; printf(“%f”,q); output 為 0.000000 但在 C++ 中 float *q=nullptr; cout&lt; <q; give output 0?< div><div id="text_translate"><p> <strong>[我的問題有點奇怪,但現在更改它是不對的,因為它得到了很好的解釋,但我正在使用 [Update].......[Update End] 標簽對其進行編輯,以避免對即將訪問我的訪問者造成混淆郵政]</strong></p><p> <strong>C</strong></p><pre> #include&lt;stdio.h&gt; int main() { float *q=NULL; printf("%f\n",q); }</pre><p> <strong>OUTPUT</strong></p><pre> 0.000000</pre><ul><li> 在 C output 為 0.000000</li><li> 所以這里 q 是浮點型 null 指針還是 q 是 (void *) 類型 null 指針?</li><li> 我覺得它是 (void *) 類型。</li><li> 因此格式(%f)和參數(void *)不匹配會調用未定義的行為並導致此類錯誤類型output</li></ul><p> <strong>[更新]</strong><strong>但是你會回答我自己的問題,我問的這么愚蠢的問題</strong></p><p>基本上我很困惑,我覺得我必須打印一些浮點類型或 void 類型,但關鍵是我正在打印地址,所以使用 %f 來打印地址只是愚蠢的。</p><p> 顯然 q 是浮點型指針,只是我覺得完全錯誤</p><p>通常我們使用 %u 來打印任何類型變量的地址(int,char,float)但是對於指針我們應該使用 %p</p><p> <strong>[更新結束]</strong></p><p> <strong>C++</strong></p><pre> #include&lt;iostream&gt; int main() { float *q=nullptr; std::cout&lt;&lt;q; }</pre><p> <strong>OUTPUT</strong></p><pre> 0</pre><ul><li> 在 C++ 中給出 output 0</li><li> 我認為這很好,因為它將第一個 memory 塊的地址指向任何內容</li><li>如果 q 是 nullptr_t 類型,那么 C++11 應該給出歧義錯誤意味着這里 q 是浮點類型 nullptr。</li></ul><p> <strong>[更新]</strong></p><p> C 和 C++ 標准都指定 null 指針常量比較等於零 - 他們沒有說明該地址的內容。</p><p> 顯然 q 只是浮點類型 nullptr</p><p> <strong>[更新結束]</strong></p><p> <strong>因此,如果我的兩個假設都是正確的,那么為什么在 C++ nullptr 中將其類型從 nullptr_t 更改為浮點類型,但在 C NULL 中將其類型更改為(void <em>)</em>不更改</strong>?</p><p> <strong>[更新]</strong></p><p> 我在 C 的第一個示例中的第一個假設 q 是 (void*) 類型已經是錯誤的,第二個假設是在第二個例子中。 C++ 的 q 是 nullptr_t 也是錯誤的。</p><p> 所以在這里總結一下</p><p>我試圖比較這發生在 C 和這發生在 c++ 我覺得這些事情是相互矛盾的</p><p>但實際上,在 C 中,我使用 %f 打印第一個錯誤的指針地址。 In C++ code all I think is all right except One thing that it is wrong to assume that null pointer points to 1st block of memory which is 0th as it is not specify in c standard it just say that nullptr constant compares to 0 when evaluate.</p><p> 這么多的錯誤只是問題,所以這不是正確的問題</p><p> <strong>[更新結束]</strong></p></div></q;> C ++ vector或Queue在內存和速度方面構建大Q. C ++符號和Q符號不匹配 在C ++和QML之間共享(Q)WebChannel Python和C ++之間不同尋常的速度差異 Q:C++代碼中使用“\r”后打印剩余0 加快R性能或將R函數轉換為C ++函數 R和C ++之間的通信 相同的 c 和 c ++ 程序之間的巨大速度差異 本機 R 函數與 C++ 等效函數的速度
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM