2011-01-26 67 views
1

这是我的第一个问题。我放弃了,并且会使用一个手卷函子来做这件事,但我很好奇它应该如何完成。下面这个人为设计的例子旨在将矢量中的所有矢量调整为9,并用空值填充它们。指示的行导致MinGW GCC 4.5.0发出大量模板错误。我尝试了几种不同的排列方式,但只发布了下面我认为“最接近正确”的代码。它应该如何书写?请注意,我想保留调整大小的双参数版本。for_each绑定矢量调整大小

#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; 
} 

非常感谢您的意见。

回答

1

很难说没有看到错误输出(坦率地说,即使有)。但是,尝试通过NULL作为void*类型:static_cast<void*>(0)。否则,由bind返回的对象会尝试给出一个int值作为resize的第二个参数。

+0

Amnon的答案适合我。为寻找函子的做法,我做了以下内容: 模板 类resize_functor { 市民: \t resize_functor(为size_t尺寸,T值):size_(大小),VALUE_(值){}; ()(C&container){ \t template void operator \t} private: \t size_t size_; \t T value_; }; ... for_each(stacked_vector.begin(),stacked_vector.end(),resize_functor (9u,0)); – 2011-01-26 21:47:33

0

试试这个。

#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); 
} 

如果您不想指定默认值,则不需要。