[英]++i vs i++ ? Why is i++ faster while ++i is supposed to be faster?
[英]C++ while loop v[i++] vs i++ in while body
我有一個關於在 while 循環中迭代的問題。 所以假設我們有一個大小為 10 的向量,元素從 0 到 9。 我們有一個只迭代一次的 for 循環,在 for 循環中我們有一個 while 循環。 當我打印循環時,我得到了兩種不同的結果,但我不確定為什么。
我理解第一個循環背后的想法,我們在 while 的主體中增加 j 並且我們沒有在最后一次迭代中進入循環,因為 j 是 5,所以我們只打印 0-4。 第二個循環是我在理解方面遇到問題的地方。 我的邏輯是首先我們將指針 j 增加到 1,所以這就是我們計算 1 而不是 0 的原因。但是一旦 j 是 4 v[j++] = 5 並且在循環中的條件中,當 v[j++] = 5 時,為什么要這樣做我們還是 5 嗎? 任何幫助表示贊賞。
vector<int> v(10);
for(int i = 0; i < v.size(); i++){
v[i] = i;
}
int j = 0;
for(int i = 0; i < 1; i++){ // first loop
while(v[j] != 5){
cout << v[j]; //prints 0 1 2 3 4
j++;
}
}
for(int i = 0; i < 1; i++){ //second loop
while(v[j++] != 5){
cout << v[j]; //prints 1 2 3 4 5
}
}
后綴遞增在概念上復制內存中的操作數,遞增原始操作數,最后產生副本的值。
下面的代碼片段相當簡單。 打印vector
的內容后, j
已增加。
vector<int> v(10);
for(int i = 0; i < v.size(); i++){
v[i] = i;
}
int j = 0;
for(int i = 0; i < 1; i++){ // first loop
while(v[j] != 5){
cout << v[j]; //prints 0 1 2 3 4
j++;
}
}
現在,讓我們看看第二個循環。
vector<int> v(10);
for(int i = 0; i < v.size(); i++){
v[i] = i;
}
int j = 0;
for(int i = 0; i < 1; i++){ // second loop
// values of j are 0 1 2 3 4
while(v[j++] != 5){
// values of j are 1 2 3 4 5 because it has been incremented
cout << v[j]; //prints 1 2 3 4 5
}
}
如上所述,j++ 會增加 j,因此當 j 為 3 時,v[j++] 為 4,因此 while 中的條件不會被破壞。 但是因為 j++,當 cout 被執行時 j 是 4 並且 v[4] 是 5 所以 5 被打印出來
您忘記在第一個循環后重新初始化j
。 如果您想在第二個循環中從 1 打印到 5,那么您應該在第二個循環運行之前將j
重新初始化為 0。 嘗試:
vector<int> v(10);
for (int i = 0; i < v.size(); i++) {
v[i] = i;
}
int j = 0;
for (int i = 0; i < 1; i++) { // first loop
while (v[j] != 5) {
cout << v[j]; //prints 0 1 2 3 4
j++;
}
}
j = 0;
for (int i = 0; i < 1; i++) { //second loop
while (v[j++] != 5) {
cout << v[j]; //prints 1 2 3 4 5
}
}
使用單個 for 循環將有助於更好地理解代碼,因為循環的兩個條件相同。
vector<int> v(10);
for (int i = 0; i < v.size(); i++) {
v[i] = i;
}
int j = 0;
for (int i = 0; i < 1; i++) { // first loop
while (v[j] != 5) {
cout << v[j]; //prints 0 1 2 3 4
j++;
}
// joined the end of the first loop and the start of the second loop
j = 0;
while (v[j++] != 5) {
cout << v[j]; //prints 1 2 3 4 5
}
}
希望對回答你的問題有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.