C++基础:: struct vs class

struct:所有成员都是public

当我们需要直接访问结构或者类的数据成员时,而不欲打破类(class)对数据成员都是protected或者private的约定俗成的规范(convention),这时struct便是一个更为合适的选择,比如C++标准库对pair工具类(在<utility>中定义)的设计:

namespace std
{
    template<typename T1, typename T2>
    struct pair
    {
        // member
        T1 first;
        T2 last;
    }
}

因为我们在客户端编程时,是把pair对象当做一种容器来使用的,既然是容器,存取元素便是基本操作:

std::pair<T1, T2> p = getAPair();
p.first ...
p.second ...

function object

当作为仿函数的一些类没有特别的数据成员时或者继承体系时,而且主要是一个括号运算符重载(operator())时,一般使用struct来定义:

我们暂且以一元运算unary_negate为例:

template<typename Arg, typename Result>
struct unary_function
{
    typedef Arg argument_type;
    typedef Result result_type;
}

template<typename T>
struct negate :public unary_function<T, T>
{
    T operator()(const T& x)const 
    {
        return -x;      
                // 本质的操作就这一句,
                // 接收一个T类型的变量,返回其负值
    }
}

客户端程序:

int main(int, char**)
{
    std::vector<int> src{0, 1, 2, 3, 4};
    std::vector<int> dst(src.size());
    std::transform(ivec.begin(), ivec.end(), 
                dst.begin(), 
                ::negate<int>());
    std::copy(dst.begin(), dst.end(), 
                std::ostream_iterator<int>(std::cout, " "));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值