Я пытаюсь получить индекс элемента в векторе strings
, чтобы использовать его в качестве индекса в другом векторе int
типа, возможно ли это?
Пример:
vector <string> Names;
vector <int> Numbers;
...
// condition to check whether the name exists or not
if((find(Names.begin(), Names.end(), old_name_)) != Names.end())
{ // if yes
cout <<"Enter the new name."<< endl;
cin >> name;
replace(Names.begin(), Names.end(), old_name_, name);
}
Теперь я хочу получить позицию old_name
в Names
векторе, чтобы использовать ее для доступа к определенному элементу в Numbers
векторе. Так что я могу сказать:
Numbers[position] = 3 ; // or whatever value assigned here.
Я пробовал использовать:
vector <string> :: const_iterator pos;
pos = (find(Names.begin(), Names.end(), old_name_))
Numbers[pos] = 3;
но, очевидно, это не работает, поскольку pos
имеет тип строки!
Ответы:
Чтобы получить позицию элемента в векторе, зная итератор, указывающий на элемент, просто вычтите
v.begin()
из итератора:Теперь вы должны проверить
pos
против ,Names.size()
чтобы увидеть , если он находится вне границ или нет:векторные итераторы работают аналогично указателям на массивы; Большая часть того, что вы знаете об арифметике указателей, также применима к векторным итераторам.
Начиная с C ++ 11, вы можете использовать
std::distance
вместо вычитания как итераторы, так и указатели:источник
ptrdiff_t
это лучше , чемsize_t
такptrdiff_t
бы поднять предупреждение сравнения между подписью и целого числа без знакаptrdiff_t
потому что он позволяет хранить расстояние между любой парой итераторов в одном контейнере даже в ситуациях, когда результат отрицательный. Если мы используем,size_t
мы должны быть осторожны, чтобы не вычесть больший итератор из меньшего итератора.Если вам нужен индекс, вы можете использовать его
std::find
в сочетании сstd::distance
.источник
Я новичок, поэтому вот ответ для новичков. If в цикле for дает i, который затем можно использовать, но при необходимости, например, Numbers [i] в другом векторе. Большинство из них - пустяк для примера, а слово «за / если» говорит само за себя.
источник