我有一个列表L
,需要计算它中有多少1个。
list<int> L;
L.push_back(14); L.push_back(5); L.push_back(22);
L.push_back(1); L.push_back(1); L.push_back(-7);
我给出的功能是:
assert ( count(...,...,...) == 2);
我需要知道什么会取代...
。
我已尝试L.begin(), L.end(), 1
替换...
,但它一直给我一个错误,说不允许。所以我需要替换...
而不添加任何额外的代码。
这是我得到的错误:
错误C2782: “iterator_traits&LT; _Iter&GT; :: difference_type std :: count(_InIt,_InIt,const _Ty&amp;)': 模板参数'_InIt'是 暧昧
这是确切的代码&amp;错误。
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <cassert>
using namespace std;
int main()
{
int A1[6] = {15,8,10,9,12,13};
vector<int> V(A1, A1+6);
list<int> L;
L.push_back(14); L.push_back(5); L.push_back(22);
L.push_back(1); L.push_back(1); L.push_back(-7);
count(L.begin(), L.end(), 1);
}
错误C2782: “iterator_traits&LT; _Iter&GT; :: difference_type std :: count(_InIt,_InIt,const _Ty&amp;)': 模板参数'_InIt'是 暧昧
c:\ program files \ microsoft visual studio 9.0 \ vc \ include \ algorithm(160): 看到'std :: count'的声明1&gt;
可能是'unsigned int'
答案 0 :(得分:5)
它应该是std::count(L.begin(), L.end(), 1)
所以如果这不起作用,我可以说是确保你#include <algorithm>
。
此代码在VS2008中为我编译:
#include <list>
#include <algorithm>
#include <cassert>
using namespace std;
int main()
{
list<int> L;
L.push_back(14); L.push_back(5); L.push_back(22);
L.push_back(1); L.push_back(1); L.push_back(-7);
assert( count(L.begin(), L.end(), 1) == 2);
}
答案 1 :(得分:0)
确保使用命名空间std;在所有包含之后并确保您还包括算法 那么L.begin()和L.end()应该没有任何问题
答案 2 :(得分:-1)
使用std :: count_if
http://www.sgi.com/tech/stl/count_if.html
这是一个更好的样本: http://msdn.microsoft.com/en-us/library/w2d7w2x2%28VS.80%29.aspx