Я пишу функции, возвращающие известное количество элементов , которые я часто добавляю в другую коллекцию:
// declaration:
std::vector<int> computeNumbers();
// usage:
std::vector<int> nums = computeNumbers(); // allocates a vector inside and returns it
allnums.insert(allnums.end(), nums.cbegin(), nums.cend()); // after this, `nums` is not useful anymore
В качестве альтернативы вышеприведенное можно записать в виде:
// declaration:
void computeNumbers(std::vector<int>::iterator outputIterator);
// usage:
computeNumbers(allnums.end());
(при условии, что в обоих случаях allNums
достаточно места)
Второй вариант, похоже, сохраняет распределение в моем случае и оставляет больше выбор для вызывающего в целом, но он также кажется немного менее ясным и простым, чем просто возвращение вектора.
Итак, в общем случае :
- Что Какие плюсы и минусы я не упомянул?
- Существует ли какое-либо установленное соглашение по этому вопросу?
- Есть ли другие способы избежать лишних алл c?