Я думаю, что у меня есть легкая проблема, но я не могу найти решение нигде.C++ доступ к определенному диапазону индексов вектора
У меня есть вектор строки, содержащий много слов. говорят 1-й элемент писем, но я хочу только получить доступ к первым писем. Как мне это сделать?!
std::string test_word = "hou";
std::vector<std::string> words = {"house", "apple", "dog", "tree", ...}
if (test_word == /*(words[0].begin(), words[0].begin()+3)*/) {
...
}
Каков правильный грамматический способ его написания?
EDIT: решение
std::string test_word = "hou";
std::vector<std::string> words = {"house", "apple", "dog", "tree", ...}
for (int i = 0; i < words.size(); i++) {
for (int j = 1; j <= words[i].size(); j++) {
if (words[i].compare(0,j, test_word) == 0) {
...
}
}
}
Ваше решение неэффективно. Сравнение строк за пределами длины test_word не требуется. Обратите внимание, что когда j> test_word.size(), оператор if всегда будет false. Например, когда i = 0 и j = 4, слова [0] .compare (0, 4, test_word) никогда не вернут 0, потому что «дом» не равен «hou». Вы пытаетесь найти все строки в словах, которые имеют один и тот же префикс (т. Е. Test_word)? – putnampp
@putnampp - да, вы правы, это небольшая проблема. но я не знаю, как это проверить. это как-то возвращается к моему первоначальному вопросу о том, как выбрать определенный диапазон вектора. (Я прихожу из _Matlab_, и там это очень просто). ** Я мог бы сделать это: ** 'if (words [i] .substr (0, j) .size() <= test_word.size())' перед другим _if_, но код даже работает в 5 раз дольше, чем :( –
@putnampp - а также да, я проверяю каждый возможный префикс слов в векторе, если он равен test_word.и test_word всегда различается по длине (в зависимости от ввода), поэтому мне нужен второй цикл, чтобы действительно проверить на 'ho ==', затем 'hou ==', затем 'hous ==', затем 'house ==' , затем 'ap ==' ... и так далее. –