2014-09-15 21 views
6

Giả sử tôi có một véc tơ A = {1 0 1 1 0 0 0 1 0}. Bây giờ tôi muốn lấy các chỉ số của tất cả các lần xuất hiện của 0 được trả về như một vectơ khác B.Tìm các chỉ mục của tất cả các lần xuất hiện của một phần tử trong một vector

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

} 

Dưới đây là một khởi đầu:

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

@ScottMorken không nên mà được 'template std :: vector ...'? OP đang tìm kiếm một tập hợp các chỉ mục, không phải là một tập hợp các bản sao của các phần tử. – jaggedSpire

+0

có bạn đã đúng, chỉnh sửa lại –

Trả lời

11

Chỉ cần gọi std::find_if một lần nữa, với sự lặp lại trước đó (cộng với một) như ban đầu. Thực hiện trong vòng lặp cho đến khi std::find_if trả lại A.end().


Mẫu mã

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

    iter++; 
} 
+0

bạn có thể giải thích chi tiết hơn mà tôi không nhận được. – Hum

+0

@Hum Đã thêm một số mã. –

+0

Cảm ơn, tôi đã tạo nó std :: vector :: iterator iter = data.begin(); trong khi ((iter = std :: find (iter, data.end(), 0))! = Data.end()) { int idx = std :: distance (data.begin(), iter); cout << idx; lặp + +; } – Hum

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