Я надеюсь, что кто-то может предложить некоторое понимание конкретной проблемы, которая у меня есть. Я пишу программу, которая принимает целые числа, сохраняет их в векторе и распечатывает их с разделителями-запятыми для чисел больше 999 -> 1000.
Мой вопрос … ну, два на самом деле, как я могу передать вектор в функцию, и во-вторых, если я хотел перегрузить << сделать все это за кулисами это было бы возможно?
глобальная функция из класса Comma:
template <class T>
string formatWithComma(T value){
stringstream ss;
locale commaLoc(locale(), new CommaNumPunc() );
ss.imbue(commaLoc);
ss << value;
return ss.str();
цикл в main () для отображения вектора:
for (vector<unsigned int>::iterator i = integers.begin(); i != integers.end(); ++i){
cout << formatWithComma(*i) << " ";
}
Первый вопрос:
как я могу передать вектор в функцию
Просто передайте это напрямую. Например (предположим шаблон функции):
template <typename T>
void processVector(const vector<T>& vec );
Внутри main вы можете назвать это следующим образом:
processVector<unsigned int> (integers); //an example instantiation
Второй вопрос:
если бы я хотел перегрузить << сделать все это за кулисами это было бы возможно?
Да, конечно возможно. посмотрим как перегрузить <<
Оператор из этих ресурсов:
Перегрузка MSDN << оператор а также
Перегрузить << оператор WISC
и куча ресурсов от SO: Как правильно перегрузить << оператор
Передача вектора в функцию может быть сделана так:
void foo(std::vector<T> &vector);
void foo(const std::vector<T> &vector);
Обычно вы хотите передать (постоянную) ссылку, чтобы избежать копирования вектора.