2014-11-03 36 views
0

所以我只是试图设置一个给定的数组索引值计数函数的结果。我已经阅读了有关计数函数的API,但在尝试将我的参数传递给所述计数函数时,我一直收到expression must have class type错误。功能找到一个数组的开始和结束

这是到目前为止我的代码:

#include <iostream> 
#include <limits> 
#include <algorithm> 
#include <array> 

using namespace std; 

int main(){ 

    const size_t ARRAY_SIZE = 400; 
    int totalElements; 
    cout << "How many grades will you be entering?: "; 
    cin >> totalElements; 

    int gradesArray[ARRAY_SIZE]; 
    for(int i = 0; i < totalElements; i++){ 
     cout << "Please enter a grade: "; 
     cin >> gradesArray[i]; 
    } 
    //to be incrimented with each count of a certain grade, from 0-5 
    int countOfGrades[6] = {0, 0, 0, 0, 0, 0}; 

    countOfGrades[0] = count(gradesArray.begin(),gradesArray.end(),0); 

    return 0; 

}//end of main 
+0

你在哪里定义了'count'? – 2014-11-03 00:46:02

+0

http://www.cplusplus.com/reference/algorithm/count/ – FluffyKittens 2014-11-03 00:46:38

+0

@ScottHunter:他没有:http://en.cppreference.com/w/cpp/algorithm/count – 2014-11-03 00:46:38

回答

3

数组没有载体和他们没有一个begin()end()函数(或任何成员函数,它们不是类的类型!)

但是,您可以使用std::beginstd::end或只是通过阵列和最后一个元素的地址+ 1.

+0

为了澄清,这将看起来像'std :: count(std :: begin(gradesArray),std :: end(gradesArray),0)' – 2014-11-03 00:55:20

+0

谢谢,我习惯于Ruby,其中一切都是类类型。 – FluffyKittens 2014-11-03 00:55:35

2

数组没有开始和结束的方法,也许你想std::vector。或者只传递指针,它遵循count所需的迭代器接口。

count(gradesArray, gradesArray + ARRAY_SIZE, 0); 
+0

API清楚地表明他们已经将begin()和end()作为成员函数?我错过了什么? http://www.cplusplus.com/reference/array/array/begin/ – FluffyKittens 2014-11-03 00:50:53

+0

这是为'std :: array'类型,它是不同于常规数组。 – msandiford 2014-11-03 00:52:49

+0

哦,我明白了。这很有道理,即使它看起来不太直观。感谢您的帮助。 – FluffyKittens 2014-11-03 00:54:14

0

std::beginstd::end非成员函数可以采用容器或数组。 container.begin()container.end()成员功能。常规数组没有任何成员函数。既然你有一个支持C++ 11的编译器,没有理由使用原始数组。首选std::arraystd::vector

std::array<int, ARRAY_SIZE> gradesArray; 
相关问题