Я испытываю неожиданное снижение производительности при использовании векторов с классами.
У меня есть класс csv_File, который читает в файле csv и сохраняет содержимое в двухмерном векторе. Есть функция-член, которая разрешает доступ, например,
csv_File file("file.csv");
file.access(2,2);
Для доступа к элементу 2,2.
Затем у меня есть другой класс csv_Array, который хранит несколько объектов csv_File в векторе, например, закрытый вектор-член
Есть функция-член, которая разрешает доступ, то есть возвращает объект csv_File, например:
csv_Array file_array(5); //store 5 csv_File objects
file_array.grab(0).access(2,2);
Во второй строке grab возвращает объект csv_File (в данном случае первый), а access является функцией-членом объекта csv_File.
Однако я заметил, что звонок
csv_Array.grab (0) .access (2,2);
намного медленнее, чем должно быть (должно быть всего 3 вектора :: при вызовах).
Есть ли какая-то скрытая копия, которая делает это очень медленным?
РЕДАКТИРОВАТЬ: Вот некоторые из соответствующих прототипов функций:
//Access in csv_File
std::string access(int row, int column);
//grab in csv_Array and csv_Analysis (mentioned below)
csv_File grab(int index);
ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ (при необходимости):
Применение этого кода состоит в том, чтобы загрузить несколько файлов CSV в память, а затем передать их классу-другу, который проведет некоторые вычисления с данными. Схематично у меня следующее:
1) csv_Array имеет закрытое векторное хранилище элементов;
2) csv_Analysis - класс, являющийся другом csv_Array
3) csv_Analysis обращается к векторному хранилищу, которое находится в csv_Array
4) Этот доступ осуществляется путем передачи csv_Analysis ссылки на хранилище в csv_Array (так что, надеюсь, не копировать ....), например
общественности:
csv_Analysis (csv_Array & csv_block);
Таким образом, вызов, указанный выше [file_array.grab (0) .access (2,2); ]
на самом деле имеет один дополнительный класс "уровень" между ними и больше похож на
csv_Analysis analysis_Object(file_array);
analysis_Object.grab(0).access(2,2);
где захват действует аналогичным образом и также определяется как функция-член класса csv_Analysis.