for_each绑定矢量大小调整大小

时间:2011-01-26 20:56:35

标签: function bind member tr1

这是我的第一个问题。我放弃了,并将为此使用手动编织器,但我很好奇它应该如何完成。下面的设计示例旨在通过用空值填充向量来调整向量中的所有向量的大小为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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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); 
} 

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