2011-10-09 42 views
12

Cách tốt nhất để đếm tất cả các phần tử trong một trình lặp là gì?Có bao nhiêu phần tử giữa hai vòng lặp

Tôi muốn mã tương đương này

template<typename T,typename S,S val> 
struct ConstantFunctor : unary_function<T,S> 
{S operator()(const T&) const {return val;}}; 
template<typename T> 
struct TrueFunctor : ConstantFunctor<T,bool,true>{}; 
... 
count_if(c.begin(),c.end(),TrueFunctor()); 

cách tốt nhất để làm điều đó là gì?

Tôi có thể sử dụng boost::lambda::constant(true), nhưng có thể có điều gì đó rõ ràng hơn.

+2

Tại sao bạn không sử dụng 'std :: distance'? – Vinzenz

+0

@Vinzenz Đó là những gì tôi đang tìm kiếm ... Thaks –

+0

Với tôi * đếm tất cả các yếu tố giữa hai vòng lặp * âm thanh như có được giá trị của các phần tử và tổng hợp chúng, đó là 'tích lũy'. Nếu những gì bạn muốn biết là * có bao nhiêu yếu tố trong phạm vi * Tôi nghĩ nó sẽ có lợi nếu bạn thay đổi tiêu đề câu hỏi. –

Trả lời

25

Nếu bạn muốn đếm tất cả các phần tử trong một phạm vi. sau đó bạn có thể sử dụng std::distance, từ <iterator> tiêu đề, như vậy:

int count = std::distance(begin(c), end(c)); 

Nó nên là đủ.

Các online doc nói về std::distance:

Tính số phần tử giữa đầu tiên và cuối cùng.

+0

chỉnh sửa sai mà không có thẻ C++ 11 bị thiếu ở đây – davidhigh

+4

@davidhigh: Đây là năm 2015 và C++ 14 được phát hành, vì vậy ý ​​nghĩa mặc định của C++ nên là C++ 14, trừ khi phiên bản khác được đề cập. – Nawaz

Các vấn đề liên quan