C言語++iとi++
13066 ワード
今日は小さなエラーが発生し、キューから取得した値が正しくないため、エラーの原因が見つかるまで長い間調べられました.教訓を吸収するために、以下のように記録します.
1エラーのコード
通常はfor(int i=0;i<100;++i)を書くのに慣れているので、キュー値を取得するときもついでに++arg->queueと書く.tail.
2正しいコード
3注意事項
デモコード
4テクニック
この特性に基づいて、c++でこのテクニックを使用して容器の要素を削除することができます(私の初期のブログで使用したことがあります).
1エラーのコード
item = arg->queue.queues[++arg->queue.tail];
通常はfor(int i=0;i<100;++i)を書くのに慣れているので、キュー値を取得するときもついでに++arg->queueと書く.tail.
2正しいコード
item = arg->queue.queues[arg->queue.tail++];
3注意事項
デモコード
/*
* array[++index] ++ index = index+1, index
* array[index++] ++ index , index = index+1
* i=1; y=i++; :i=1; y=i; i=i+1; y=1; i=2;
* i=1; y=++i; :i=1; i=i+1; y=i; y=2; i=2;
*/
#include
#include
int main() {
int queues[4] = {1,2,3,4};
int index=0;
// 1, queues[0] ,
// , 1
fprintf(stdout,"%d
",queues[index++]);
// , 2
index=0;
fprintf(stdout,"%d
",queues[++index]);
return (EXIT_SUCCESS);
}
#include
#include
int main(int argc, char** argv) {
int n = 0, i = 0;
fprintf(stdout, "%d
", n = i++);
fprintf(stdout, "%d
", n = ++i);
fprintf(stdout, "%d
", i++);
fprintf(stdout, "%d
", i);
return (EXIT_SUCCESS);
}
/*
0
2
2
3
*/
4テクニック
この特性に基づいて、c++でこのテクニックを使用して容器の要素を削除することができます(私の初期のブログで使用したことがあります).
#include
#include
int main(int argc, char** argv) {
std::set<int> container;
container.insert(1);
container.insert(2);
container.insert(3);
container.insert(4);
container.insert(5);
container.insert(6);
for (std::set<int>::iterator it = container.begin(); it != container.end();) {
if (3 == (*it)) {
/*
* 3
* 3 , erase(it) , it = it +1
*/
container.erase(it++);/* Really smart! */
} else {
++it;
}
}
// const_iterator
for (std::set<int>::const_iterator it = container.begin(); it != container.end();++it)
std::cout << *it << std::endl;
return 0;
}