2015-09-18 58 views
0

所以我應該通過評論中的需求編輯一堆代碼。我得到了大部分,但特別是有一部分我卡住了。它像原來的一樣循環,但我無法弄清楚循環的條件應該如何,而我所做的任何事情最終都會崩潰。我認爲這是sizeof?但沒有我嘗試的作品。任何幫助,將不勝感激!不確定這個循環的條件(指針算術)

原文:

int main() 
{ 
const string ID_BASE = "56-123-"; 
// CHANGE STATIC ARRAY INTO DYNAMIC ARRAY. 
const int NUM_PRODUCTS = 5; 
Product products[NUM_PRODUCTS]; 
int i; 

//cout << "Enter number of toys: "; 
//cin >> numProducts; 

    ....Code to fill products... 

//ALTER LOOP TO USE ONLY POINTER OPERATIONS 
// (NO SUBSCRIPTS). 
for (i = 0; i < numProducts; i++) 
{ 
    show(products[i]); 
} 

我的變化:

int main() 
{ 
const string ID_BASE = "56-123-"; 
// CHANGE STATIC ARRAY INTO DYNAMIC ARRAY. 
int numProducts; 
Product *products; 
int i; 

cout << "Enter number of toys: "; 
cin >> numProducts; 

products = new Product[numProducts]; 

...Code to fill products... 

//ALTER LOOP TO USE ONLY POINTER OPERATIONS 
// (NO SUBSCRIPTS). 
for (Product *prodP = products;   ; *prodP++) 
{ 
    show(*prodP); 
} 
+1

不要使用動態數組。使用矢量。 –

回答

0

不要它的迭代器風格:

auto begin = products; 
auto end = products + numProducts; 
for(auto itr=begin; itr!=end; ++itr) 
{ 
    show(*itr); 
} 
+0

如果你使用的是古老的編譯器,用'Product *'替換'auto' – sp2danny

+1

這可以工作,但是我們還沒有在課堂上討論迭代器。我提出的一個解決方案是做一個endPtr,但我不確定這是否是最好的方法。 'Product * endptr = products + numProducts; (Product * prodp = products; prodp!= endptr; prodp ++)' –

+1

看起來不錯。如果你願意的話,你也可以直接把'products + numProducts'放在條件中,就像在'prodp!= products + numProducts'中一樣。 – sp2danny

0

也許我失去了一些東西在這裏,但什麼時候修改的循環結束? ?

for (Product *prodP = products;   ; *prodP++) 
{ 
    show(*prodP); 
} 

只有有限元素,我認爲你是超載運行數組。

配置文件與valgrind這些類型的錯誤/可疑的錯誤。

+0

如果你閱讀這個問題,它會說'但我找不出什麼條件循環應該是'除其他事項 – sp2danny

+0

ok.i錯過了它。 – basav