Как получить конец вектора и присвоить его строке - PullRequest
0 голосов
/ 06 марта 2012

Я хочу получить последний элемент вектора и затем присвоить его строке, но у меня, похоже, есть проблемы.

Представьте, что этот вектор уже заполнен, но я не знаю, насколько я пыталсясделать это.

std::vector<std::string> vec;
std::string s = vec.end();

Будет ли цикл работать, а затем просто получить последний индекс?

Это не сработало, так есть ли способ получить конец вектора?

РЕДАКТИРОВАТЬ ------

out.push_back(r.validateR(str));
appendCustomizedOutput = out.back();
DCS_LOG_DEBUG("END " << appendCustomizedOutput);
split(test,appendCustomizedOutput,boost::is_any_of("\n"));
DCS_LOG_DEBUG("END " << test[0]);

Когда я пытаюсь напечатать тест [0], ничего не печатается, и я не знаю почему?

Ответы [ 5 ]

9 голосов
/ 06 марта 2012

vector::end() возвращает итератор, который находится за последним вещественным элементом в векторе (он используется главным образом для проверки во время итерации).

Лучший способ будет:

std::string s = vec.back(); // last item

Как говорят @JamesKanze и @PeterWood, не забудьте проверить наличие пустого вектора - иначе это неопределенное поведение ...

6 голосов
/ 06 марта 2012

Вот для чего vec.back().Просто убедитесь, что сначала вектор не пустой.

2 голосов
/ 06 марта 2012

Используйте vec.back(), чтобы получить ссылку на последний элемент.Используйте vec.pop_back(), чтобы удалить последний элемент (не возвращая его).

1 голос
/ 06 марта 2012

end() возвращает итератор, ссылающийся на элемент «конец конца» в векторном контейнере. Вам нужно back(): он возвращает ссылку на последний элемент в векторном контейнере.

1 голос
/ 06 марта 2012

container.end() (или любой другой контейнер) вернет итератор в конец контейнера.Чтобы получить последний элемент в контейнере, вы хотите container.back() вместо:

std::string s = vec.back();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...