2015-09-18 17 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