簡體   English   中英

如何在兩個 for 循環中的第一個之后擺脫初始化?

[英]How to get rid of initialization after first of two for-loops?

我有一個當前處於以下形式的 for 循環

for (i=0; i<N; i++) {
   y = 0.;
   for (j=0; j<N; j++)
      y += ...
}

我想把它改寫為

for (i=0; i<N; i++) {
   for (j=0; j<N; j++)
      y += ...
}

其中 y 在某個先前的點被初始化,使得兩個 for 循環被折疊。 有什么辦法可以做到這一點嗎? 這是來自以下 OpenMP 教程第 16.4 節的練習

這與您鏈接到的代碼不同。 原始有y索引,即,它是一個數組:

for (i=0; i<N; i++) {
   y[i] = 0.;
   for (j=0; j<N; j++)
      y[i] += ...
}

這可以改寫為:

for (i=0; i<N; i++)
  y[i] = 0.;

for (i=0; i<N; i++)
  for (j=0; j<N; j++)
    y[i] += ...
}

在您的情況下, y是標量。 外循環的每次迭代在內循環之前將其值重置為 0。 如果內部循環中沒有副作用,則只有外部循環的最后一次迭代計數,您可以簡單地擺脫它:

i = N-1;
y = 0.;
for (j=0; j<N; j++)
  y += ...

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM