Для тех, кто ищет как создавать массивы строк C++ типа string[], char[][] эта статья будет не столь полезна, т.к. здесь я разбираю динамические массивы типа vector и map. Даже если вы прекрасно знаете как они работают, думаю, что будет интересен сам эксперимент.А целью эксперимента было выяснить скорость работы данных типов массивов.
Во-первых: для чего нам нужно использовать массивы строк? Допустим я практически во всех приложениях, независимо от того, на каком языке и для каких целей писал, сталкивался с массивами строк, коллекциями, списками.
Во-вторых: при обработке большого объема строк важно знать, какой класс будет работать быстрее, т.к. скорость будет критичной и программа может подвиснуть при обработке. С этим я тоже сталкивался и, если программа работала на стороне сервера (CGI), то apache сбрасывал соединение, не завершив работу скрипта (программы).
В-третьих: на многих форумах рекомендуют безумное множество вариантов работы с массивами строк. Я сразу сбрасываю массивы типа string[] и char[][], т.к. нет смысла подниматься по лестнице, когда есть лифт.
Для эксперимента написаны 4 функции: 2 для работы с vector<string> и 2 для работы с map<int, string>. Исследовались скорость добавления строки длиной в 1 байт в конец массива и получение данной строки по индексу.
Функции для работами с vector<string>:
#include <vector>
.....................
vector <string> string_array;
void add_to_string_array(string str){
string_array.push_back(str);
}
string get_from_string_array(int index){
return string_array[index];
}
Функции для работы с map<int, string>:
#include <map>
.....................
map <int, string> string_array;
void add_to_string_array(string str){
int index = string_array.size(); // следующий индекс равен нынешнему размеру
string_array.insert(make_pair(index,str));
}
string get_from_string_array(int index){
return string_array[index];
}
Протестировав получаем, что функции, работающие с vector выполняются в двыдцать раз быстрее, чем с map.
Вывод: работать с map стоит, только в случае, если вам нужно работать с именованными индексами. В случае работы с большим объемом данных и индексации порядковыми номерами вногократно быстрее работает vector.