вектор привязки for_each изменения размера вектора - PullRequest
1 голос
/ 26 января 2011

Это мой первый вопрос. Я сдался и буду использовать для этого функтор, скрученный вручную, но мне интересно, как это должно быть сделано. Придуманный ниже пример предназначен для изменения размера всех векторов в векторе размером 9, заполнив их нулями. Указанная строка приводит к тому, что MinGW GCC 4.5.0 выдает много ошибок шаблона. Я пробовал несколько различных перестановок, но только разместил код, который я считаю «наиболее близким к правильному» ниже. Как это должно быть написано? Обратите внимание, я хочу сохранить версию 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;
}

Большое спасибо за ваш вклад.

Ответы [ 2 ]

1 голос
/ 27 января 2011

Трудно сказать, не увидев вывод ошибки (и, честно говоря, даже с ней). Однако попробуйте передать значение NULL как void* тип: static_cast<void*>(0). В противном случае объект, возвращаемый bind, пытается присвоить значение int в качестве второго параметра для resize.

0 голосов
/ 14 марта 2012

Попробуйте это.

#include <functional> 
#include <algorithm> 
#include <iostream> 
#include <vector>


int main() 
{ 
    typedef std::vector<int> vec_int;
    typedef std::vector<vec_int> vec_vec_int;

    // Do this to make the   _1    work
    using namespace std::placeholders; 

    static const int FIRST_DIM = 5;
    static const int SECOND_DIM = 10;
    static const int DEFAULT_VALUE = 66;

    vec_vec_int v(FIRST_DIM);

    std::for_each(v.begin(), v.end(), 
        std::bind(&vec_int::resize, _1, SECOND_DIM, DEFAULT_VALUE));

    std::cout << v[4][9];

    return (0); 
} 

Если вы не хотите указывать значение по умолчанию, вам не нужно.

...