2013-12-17 24 views
0

有以下两种方案寻找最大secondlargest整数:关于我++与++ i在C++

1.

int main() 
{ 
    int const no_of_elements =10; 
    int list[no_of_elements] = { 1, 2, 3, 4, 5, 10, 9, 6, 7, 10 }; 
    int largest = list[0]; 
    int second_largest = list[0]; 
    int pos_largest = 0; 
    int pos_second_largest = 0; 
    int i; 

    for (i = 0; i < no_of_elements; i++) 
    { 
     if (largest <= list[i]) 
     { 
      second_largest = largest; 
      largest = list[i]; 
      pos_second_largest = pos_largest; 
      pos_largest = i; 
     } 
    } 

    cout << "Largest number is : " << largest << "\n"; 
    cout << "And it is at the position : " << ++pos_largest << endl; 
    cout << "Second largest number is : " << second_largest << " and its at the position : " << ++pos_second_largest << endl; 
    return 0; 
} 

2. 在for循环中,我做pos_largest = ++i
他们给不同的答案:
1.给出largest=10 secondlargest=10即按要求
但是2.给出largest=10 secondlargest=9

请解释一下?

+0

++ i和i ++是i + = 1。前者会先增加我然后再做操作,后面的会对我进行操作,然后将值增加1。 – David

+0

不要使用'++ i',如果要转换为开始计数,请使用'i + 1'在一个。 – RichardPlunkett

+0

在线性时间内找不到第二大元素。想象一下序列1,5,3。你的程序会说1是第二大元素。 – fredoverflow

回答

2

i++是后递增之前。这意味着“给我价值i,但在此之后,增加它”。

++i是预增量。这意味着“增量i,然后给我它的新价值”。

int i = 1; 
int a = i++; // a is now 1, i is 2 

i = 1; // reset i's value to 1 
int b = ++i; // i's value is incremented to 2, b's value is 2 

关于for回路,这两个具有相同的效果

int i; 
for (i = 0; i < 10; i++) { 
    // ... 
} 

for (i = 0; i < 10; ++i) { 
    // ... 
} 

在for循环循环体的每次迭代(执行)后运行第三部分。

1

在#2中,当您在列表中选择第一个10时,将pos_largest分配为6(即,其中9是)而不是5(其中10为),因为您已预先递增i之前的任务。因此,稍后当您在列表中点击第二个10时,它将成为最大,而您的第二大现在将被设置为9(即,点6中的值)。

1

++i and i++ is i+=1。前者先增加i然后再进行操作,后者用i进行操作,之后增加1

0

如果您使用i ++,它会在增加变量之前完成操作。如果你使用++ i,它会在完成操作之前递增。在大多数情况下,你想使用i ++,尽管它很大程度上取决于你如何使用它。例如:

for(int i = 0; i < 5; i++){ 
    cout << "i = "<< i << endl; 
} 

这将完成操作,然后递增。但是,如果使用这样的:

for(int i = 0; i < 5; ++i){ 
    cout << "i = " << i << endl; 
} 

它首先会增加打印值

+0

我认为2 ** for **循环是相同的。 – David

+0

这些例子非常非常错... –

+0

我非常抱歉,你绝对正确。这不是一个好例子。我已经删除了不正确的输出,正确的信息依然存在。 – DerStrom8

1

那么你的主要问题是理解++ i(preincrement)和i ++(postincrement)之间的区别。 ++我的意思是它很快在下一个变量或左值中加上值1。而i ++的含义是它不会将1添加到前面的左值或变量,直到序列点出现为止。并记住顺序点是; {} & & ||等。 e。如果你有这样的代码。

int test=6; 
cout<<(test++)<<endl; 
cout<<test<<endl; 

你会认为它会打印这样

7 
7 

但它不会因为它是后增量。它不会加1来测试,直到序列点出现,下一个序列点是; 。所以它会像这样打印。

6 
7 

相反的情况是preincrement。它会迅速将1加到变量(即左值,否则会给出错误),然后显示7而不等待序列点。

相关问题