Я сейчас работаю над школьным проектом c ++ с некоторыми друзьями.
Раньше, когда у меня были векторы в c ++, я делал что-то вроде этого, чтобы использовать их:
unsigned int i = 0;
while (i != myVector.size())
{
doSomething(myVector[i]);
i++;
}
Но во время этогоПроект мои друзья не были рады видеть меня, используя такие векторы, и попросили меня использовать итераторы.Мне не очень нравятся итераторы, потому что их синтаксис довольно сложно запомнить, но мои друзья сказали, что лучше их использовать, потому что он работает быстрее.И поскольку мы работаем над большим проектом с большим количеством векторов, было важно использовать итераторы.
Время прошло, и я все еще использую их, даже если я до сих пор не могу вспомнить их синтаксис, но я хотелпосмотрим, был ли метод итератора действительно быстрее их, метод unsigned int.
Итак, я создал 2 программы:
Первая программа, использующая метод unsigned int:
#include <vector>
#include <string>
#include <iostream>
int main()
{
std::string str = "This is a string";
int i = 0;
std::vector<std::string> vec;
while (i != 10000000)
{
vec.push_back(str);
i++;
}
unsigned int j = 0;
while (j != vec.size())
{
std::cout << vec[j] << std::endl;
j++;
}
return (0);
}
И вторая программа, использующая метод итератора:
#include <vector>
#include <string>
#include <iostream>
int main()
{
std::string str = "This is a string";
int i = 0;
std::vector<std::string> vec;
while (i != 10000000)
{
vec.push_back(str);
i++;
}
std::vector<std::string>::iterator it;
it = vec.begin();
while (it != vec.end())
{
std::cout << *it << std::endl;
it++;
}
return (0);
}
Как вы можете видеть, обе программы сначала создадут вектор размером 10 000 000 (я поставил большой размер, так что если естьразницу во времени будет легче заметить), а затем я просто напечатаю строку в векторе, но используя два разных метода.
Я использовал время на linux, чтобы узнать время выполнения каждой программы, например так:
time ./a.out
И вот результат:
Метод unsigned int:
real 0m39,391s
user 0m5,463s
sys 0m21,108s
Метод итератора:
real 0m39,436s
user 0m5,972s
sys 0m20,652s
И ......... это же время ?!Разница между ними незначительна, менее 1 секунды, и это вектор с 10 миллионами строк.
Так что мне было интересно, есть ли разница между этими двумя методами и действительно ли лучше использовать итераторы?