注册 登录
编程论坛 C++教室

int &(vector<int>::*extract)(vector<int>::size_type);是什么意思

花脸 发布于 2019-02-20 15:55, 2468 次点击
程序代码:
[code]
#include <iostream>
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <hash_set>
#include <functional>
using namespace std;

class Base
{
    public:
        virtual void print()=0;   
};
class B1: public Base
{
    public:
        void print()
        {
            cout<<" this is B1"<<endl;   
        }   
};
class B2: public Base
{
    public:
        void print()
        {
            cout<<" this is B2"<<endl;   
        }   
};
class Op
{
    public:
        virtual double eval(double)=0;
};
class square:public Op
{
    public:
        double eval(double x)
        {
            return x*x;   
        }   
};
class Negate:public Op
{
    public:
        double eval(double x)
        {
            return -x;   
        }   
};
int main()
{
    //mem_fun1_ref_t
    vector<int> v1{1,1,1,1,1};
    vector<int> v2{2,2,2,2,2};
    vector<int> v3{3,3,3,3,3};
   
    vector<vector<int> > v;
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
   
    vector<int> v4{1,2,3};
    int &(vector<int>::*extract)(vector<int>::size_type);//1
    extract=&vector<int>::operator[];//2
    transform(v.begin(),v.end(),v4.begin(),ostream_iterator<int>(cout," "),mem_fun_ref(extract));//3
    return 0;
}
[/code]

上边标注的1 2 3 这三行代码什么意思??求指教
5 回复
#2
rjsp2019-02-20 16:24
1 定义了一个 成员函数指针
2 给它赋值。有病呀,定义时就应该初始化
3 mem_fun_ref已经被C++废弃后删除了,用lambda吧
#3
rjsp2019-02-20 16:36
程序代码:
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

int main()
{
    vector<vector<int>> v = { {0,1,2,3,4}, {5,6,7,8,9}, {10,11,12,13,14} };
    vector<int> v4 = { 1,2,3 };

    transform( v.begin(), v.end()
             , v4.begin()
             , ostream_iterator<int>(cout," ")
             , [](const auto& ve,size_t v4e){return ve[v4e];} );
    return 0;
}
#4
花脸2019-02-20 20:16
回复 3楼 rjsp
好的 谢谢。
#5
lyb6612019-02-21 14:49
泛型编程确实好难!有许多概念容易混淆。
#6
花脸2019-02-24 22:13
回复 5楼 lyb661
是啊
1