Проблема: перегрузить оператор <<
по умолчанию для переменной vector<int> v
, так что cout << v
будет печатать каждый элемент последовательно. Здесь я видел один вариант, предложенный Джейсон Айверсон в previous questionОператор перегрузки C++ с/без определения шаблона
template<typename T>
std::ostream& operator<<(std::ostream& s, std::vector<T> t) {
s << "[";
for (std::size_t i = 0; i < t.size(); i++) {
s << t[i] << (i == t.size() - 1 ? "" : ",");
}
return s << "]" << std::endl;
}
Очевидно, что это должно работать для любого типа элементов, однако, так как я озабочен только int
, я упростил функцию
ostream& operator << (ostream &os, const vector<int> &v){
for (auto x: v){
os << " " << x;
}
return os;
}
Он просто отлично работает.
Так что мой вопрос
- Насколько
vector<int> v
обеспокоен, что такое предостережение не используяtemplate
? - Помимо общего назначения, в чем преимущество решения Джейсона?
Спасибо!
Более глубокие мысли: выше вопрос был плохо сформулирован, и благодаря комментариям, я считаю, что это имеет смысл перефразировать его. Вопрос: в C++, Какова стоимость использования template
, где достаточно однотипной функции?
Кредиты @Marco A и @Walter, этот вопрос может быть закрыт.
Знаете ли вы, что такое «шаблон»? Если да, то почему вы спрашиваете, если нет, идите и узнаете об этом. – Walter
Чем больше пользы, чем общего назначения/не нужно писать перегрузки самостоятельно, вам нужно? – NathanOliver
@Walter Я знаю 'template', но хочу понять его преимущество, кроме как быть более общим, не указывая тип' T'. – wenduowang