Как мне избежать копирования целых значений вектора kws
в req_kws
(вектор векторов) ниже, сохранив при этом два контейнера kws
и req_kws
в моем коде?
vector<vector<string>> req_kws;
for (string& request : requests) {
vector<string>& kws = req_kws.back(); //<-- define &kws to empty req_kws
kws = split(kwsStr, ","); //split is a parsing function upon string kwsStr
req_kws.push_back(kws);
}
Я использовал в строке номер 3
vector<string>& kws = req_kws.back();
Таким образом, вместо сохранения всех значений kws
вектора, только его ссылка сохраняется в req_kws
.
Но, я я получаю ошибку сегментации во время выполнения. Есть способ исправить?
Спасибо за вашу помощь.
Дополнительное примечание;
Обратите внимание на мое ограничение, указанное выше, что мне нужно сохранить обе строки номер 4 (kws) и 5 (req_kws) неповрежденными, и хотите использовать строку номер 3 ссылки (&) или что-то подобное, чтобы сэкономить время выполнения из-за того, что одни и те же значения сохраняются как в kws, так и в req_kws. У меня есть другие части кода с той же проблемой, которые более сложны, поэтому я не могу просто объединить две строки из 4 и 5 в одну.
Дополнительный вопрос (аналогичная проблема):
Спасибо за ваше решение ниже. Однако как насчет следующего случая, который похож на предыдущий, но более сложный.
vector<unordered_map<string, string>> ads_kwsBids;
for (const auto& kwBid : kwsBids) {
…
unordered_map<string, string>& kwsBidsMap = ads_kwsBids.back(); //to prevent from being whole container copied
for (unsigned j = 0; j < nsize; j++) {
unsigned jdx = 2 * j;
kwsBidsMap[splitedStr[jdx]] = splitedStr[jdx + 1];// constructing map kwsBidsMap
}
ads_kwsBids.push_back(kwsBidsMap);
}
В строке номер 4, то есть
unordered_map<string, string>& kwsBidsMap = ads_kwsBids.back();
Из-за ссылки &
, это приводит к ошибке сегментации. Но ссылка также предотвращает копирование kwsBidMap
в ads_kwsBids
. Есть ли способ использовать ссылку &
на kwsBidMap
и не получить ошибку сегментации?