вектор, как найти первое и последнее текущее значение - PullRequest
0 голосов
/ 09 марта 2019

Задача: найти первое и последнее текущие значения. Пример:

vector = {1,2,3,1,6,2,1};

need value 1 =>

 first index = 0, last = 6; (index/position);



    vector<int>::iterator it = find(v.begin(), v.end(), 1); 
    if (it != v.end())
    {
        cout << "Element Found" << std::endl;

        // Get index of element from iterator
        int index =      distance(v.begin(), it);
        int lastindex  = distance(v.end(), it); // bad try to find
        cout <<"Index of first element in vector : "<<index<<" last elem ";
// bad code <<lastindex - index <<endl;
    }
    else
    {
        cout << "Element Not Found" << std::endl;
    }

Я нашел первую позицию, но не могу найти последнюю. Нужна помощь)

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вы можете использовать обратный итератор, чтобы найти последний элемент следующим образом:

DEMO

int main()
{    
    std::vector<int> v = {1,2,3,1,6,2,1};

    const int currentVal = 1;
    const auto itf = std::find(v.cbegin(), v.cend(), currentVal);
    const auto itb = std::find(v.crbegin(), v.crend(), currentVal);

    if(itf != v.cend()){
        std::cout << "front pos: " << std::distance(v.cbegin(), itf) << std::endl;
        std::cout << "back pos : " << (v.size() - std::distance(v.crbegin(), itb) - 1) << std::endl;
    }
    else{
        std::cout << currentVal << " is not found." << std::endl;
    }

    return 0;
}
0 голосов
/ 09 марта 2019

Вы можете использовать «rbegin» и «rend», чтобы перевернуть список и найти последнее вхождение, используя тот же код, что и сейчас.

vector = {1,2,3,1,6,2,1};

need value 1 =>

 first index = 0, last = 6; (index/position);



    vector<int>::iterator it = find(v.begin(), v.end(), 1); 
    vector<int>::iterator it_reverse = find(v.rbegin(), v.rend(),1);
    if (it != v.end() && it_reverse != v.rend())
    {
        cout << "Element Found" << std::endl;

        // Get index of element from iterator
        int index =      distance(v.begin(), it);
        int lastindex  = distance(v.rend(), it_reverse); // bad try to find
        cout <<"Index of first element in vector : "<<index<<" last elem ";
    }
    else
    {
        cout << "Element Not Found" << std::endl;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...