/************************************ * file enc : ascii * author : wuyanyi09@gmail.com ************************************/ #ifndef LIMONP_VEC_FUNCTS_H #define LIMONP_VEC_FUNCTS_H #include #include #include #include #include #include #include #include #include #include #include #define FOR_VECTOR(vec, i) for(size_t i = 0; i < vec.size(); i++) #define PRINT_VECTOR(vec) FOR_VECTOR(vec, i)\ {\ cout< bool vecToString(const vector& vec, string& res) { if(vec.empty()) { res = "[]"; return false; } stringstream ss; ss<<"[\""< string vecToString(const vector& vec) { string res; vecToString(vec, res); return res; } template bool isInVec(const vector& vec, const T& item) { typename vector::const_iterator it = find(vec.begin(), vec.end(), item); return it != vec.end(); } template void splitVec(const vector& vecSrc, vector< pair > >& outVec, const vector& patterns) { vector tmp; T pattern; size_t patternSize = patterns.size(); for(size_t i = 0; i < vecSrc.size(); i++) { size_t patternPos = patternSize; for(size_t j = 0; j < patternSize; j++) { if(patterns[j] == vecSrc[i]) { patternPos = j; break; } } if(patternPos != patternSize) { if(!tmp.empty()) { outVec.push_back(make_pair >(pattern, tmp)); tmp.clear(); } pattern = patterns[patternPos]; } else { tmp.push_back(vecSrc[i]); } } if(!tmp.empty()) { outVec.push_back(make_pair >(pattern, tmp)); } } template void splitVec(const vector& vecSrc, vector< vector >& outVec, const vector& patternVec) { vector tmp; for(size_t i = 0; i < vecSrc.size(); i++) { bool flag = false; for(size_t j = 0; j < patternVec.size(); j++) { if(patternVec[j] == vecSrc[i]) { flag = true; break; } } if(flag) { if(!tmp.empty()) { outVec.push_back(tmp); tmp.clear(); } } else { tmp.push_back(vecSrc[i]); } } if(!tmp.empty()) { outVec.push_back(tmp); } } } #endif