所有容器都有.size()函数吗?

Lan*_*521 -1 c++ math size containers standard-deviation

对于家庭作业,我必须创建一个可以在任何容器上执行的模板化标准偏差功能.这就是我所拥有的:

template <typename Container>
double findMean(Container c, int count){
    double sum = 0;
    for (auto&& e : c){
        sum += e;
    }
    sum /= count;
    return sum;
}

template <typename Container>
double findStDev(Container c){
    double mean = findMean(c, c.size());
    std::cout << mean << std::endl;
    for (auto&& e : c){
        e -= mean;
        e *= e;
    }
    mean = sqrt(findMean(c, c.size()));
    return mean;
}
Run Code Online (Sandbox Code Playgroud)

我第一次找到平均值时想要除以容器的整个大小(n),但是当我第二次找到标准偏差时,我需要除以size-1(n-1).

.size()函数是否可用于所有c ++容器?

Bau*_*gen 7

几乎.根据表96 - N3797中的容器要求,标准库中的所有容器必须提供成员函数size.它应具有恒定的执行时间并返回distance(a.begin(),a.end())容器的值a.

但是,后面提到了一个(也是唯一一个)例外:

forward_list满足容器的所有要求(表96),但不提供size()成员函数.

(N3797 23.3.4.1第2条)

这意味着它std::forward_list确实是一个没有成员函数的标准容器size.