2014-09-15 13 views
6

में किसी तत्व के सभी घटनाओं की अनुक्रमणिका ढूंढना मान लीजिए मेरे पास वेक्टर A = {1 0 1 1 0 0 0 1 0} है। अब मैं 0 की सभी घटनाओं के इंडेक्स को एक और वेक्टर B के रूप में लौटा देना चाहता हूं।वेक्टर

std::vector<int>::iterator iter = std::find_if(A.begin(), A.end(), 0); 
B = std::distance(A.begin(), iter); 
+0

@ScottMorken कि नहीं होना चाहिए 'टेम्पलेट <वर्ग InputIt, वर्ग टी> std :: वेक्टर ...'? ओपी इंडेक्स के एक सेट की तलाश में था, न कि तत्वों की प्रतियों का एक सेट। – jaggedSpire

+0

हाँ आप सही हैं, फिर से संपादित –

उत्तर

11

बस फिर std::find_if कहते हैं, पहले से लौटे इटरेटर (प्लस एक) शुरुआत के रूप में के साथ:

template< class InputIt, class T> 
std::vector<int> IndicesOf(InputIt first, InputIt last, const T& value) { 

} 

यहाँ एक शुरुआत है। std::find_if तक 0 लूटपर एक लूप में करें।


नमूना कोड

std::vector<int>::iterator iter = A.begin(); 
while ((iter = std::find_if(iter, A.end(), 0)) != A.end()) 
{ 
    // Do something with iter 

    iter++; 
} 
+0

क्या आप कृपया अधिक जानकारी में समझा सकते हैं जो मुझे नहीं मिला। – Hum

+0

@Hum कुछ कोड जोड़ा गया। –

+0

धन्यवाद, मैंने इसे std :: vector :: iterator iter = data.begin() बनाया है; जबकि ((iter = std :: find (iter, data.end(), 0))! = Data.end()) { int idx = std :: distance (data.begin(), iter); cout << idx; इटर ++; } – Hum