2

次のソリューションの1つが他のソリューションよりもはるかに遅い理由を知りたいです。次のコードを考えてみましょう。

// create a very long string
int x,y;
bool b;
char c[10000];

for (x=0;x<10000;x++)
    c[x]='a';
string s(c);

今、文字列を繰り返し処理し、各文字を他の文字と比較したいと考えています。最初のソリューションは、タスクを 5 秒で完了します。

for (y=0;y<100000;y++){
for (x=0;x<10000;x++){
    b = (s[x]=='a');
}}

そして21秒で2番目:

string::iterator begin = s.begin();
string::iterator end   = s.end();
string::iterator i;

for (y=0;y<100000;y++){
    for (i=begin;i<end;i++){
        b = (*i=='a');
}}

なぜ 2 番目は非常に遅いのですか?

4

1 に答える 1