Это мой первый вопрос. Я сдался и буду использовать для этого ручную работу, но мне любопытно, как это должно быть сделано. Надуманный пример ниже предназначен для изменения размеров всех векторов в векторе размером 9, путем заполнения их нулями. Указанная строка заставляет MinGW GCC 4.5.0 вызывать множество ошибок шаблонов. Я пробовал несколько разных перестановок, но только разместил код, который, по моему мнению, «ближе всего подходит» ниже. Как это должно быть написано? Обратите внимание: я хочу сохранить двунаправленную версию изменения размера.for_each bind vector of vector resize
#include <vector>
using std::vector;
#include <algorithm>
using std::for_each;
#include <tr1/functional>
using std::tr1::bind;
using std::tr1::placeholders::_1;
int main() {
vector<vector<void *> > stacked_vector(20);
for_each(stacked_vector.begin(),stacked_vector.end(),
bind(&std::vector<void *>::resize,_1,9,0/*NULL*/)); // voluminous error output
return 0;
}
Большое спасибо за ваш ввод.
Ответ Амнона сработал для меня. Для тех, кто ищет функтор подход, я сделал следующее: шаблон класса resize_functor { общественность: \t resize_functor (размер size_t, значение Т): size_ (размер), value_ (значение) {}; \t template void operator() (C & container) { \t container.resize (size_, value_); \t} частный: \t размер_t размер_; \t T value_; }; ... for_each (stacked_vector.begin(), stacked_vector.end(), resize_functor (9u, 0)); –
Хотелось бы узнать, как добавить теги кода в комментарии ... –