codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <algorithm> template <class FwdIter> inline std::size_t overlap_count(FwdIter first, FwdIter last) { std::size_t count = 0; FwdIter cur = first; while ((cur = std::adjacent_find(cur, last)) != last) { ++count; ++cur; } return count; } template <class FwdIter, class Pred> inline std::size_t overlap_count(FwdIter first, FwdIter last, Pred pred) { std::size_t count = 0; FwdIter cur = first; while ((cur = std::adjacent_find(cur, last), pred) != last) { ++count; ++cur; } return count; } template <class FwdIter> inline std::size_t unique_count(FwdIter first, FwdIter last) { return std::distance(first, last) - overlap_count(first, last); } template <class FwdIter, class Pred> inline std::size_t unique_count(FwdIter first, FwdIter last, Pred pred) { return std::distance(first, last) - overlap_count(first, last, pred); } #include <vector> #include <algorithm> #include <iostream> using namespace std; int main() { vector<int> v; v.push_back(3); v.push_back(1); v.push_back(3); v.push_back(3); v.push_back(1); // ソート済みである必要がある sort(v.begin(), v.end()); // 重複数取得...3 size_t overlap_cnt = overlap_count(v.begin(), v.end()); cout << overlap_cnt << endl; // 重複してない数取得...2 size_t unique_cnt = unique_count(v.begin(), v.end()); cout << unique_cnt << endl; return 0; }
Private
[
?
]
Run code
Submit