私は奇妙な問題に遭遇しました:私は次のコードを持っています:
int matches = 0;
for (int str_id = 0; str_id < STR_COUNT; str_id++) {
if (test(strings1[str_id], strings2[str_id]) == 0)
matches++;
}
関数を使用して、null で終わる文字列のペアを比較しtest()
ます。strings1
とは、同じ長さの null で終わる文字列strings2
を含むベクトルです。STR_COUNT
がその引数を逆参照するかどうかに応じて、このスニペットは、およびtest()
の文字列の長さに関して一定時間または線形時間で実行されます。つまり、私が使用する場合:strings1
strings2
int test(char* a, char* b) {
return (a != b)
}
実行時間は、strings1 と strings2 に格納されている文字列の長さに依存しません。一方、私が使用する場合
int test(char* a, char* b) {
return (*a != *b)
}
strings1
実行時間は、およびに格納されている文字列の長さに比例して増加しstrings2
ます。
なぜこれが起こるのでしょうか?
編集: 問題の完全な例: http://pastebin.com/QTPAkP1g