пытаясь скопировать все элементы вектора - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть два вектора

typedef std::vector<std::string> messages;
typedef std::vector<std::string> addMessage;
messages st;
addMessage additionlMsgs;

, когда пользователь вводит строку, а затем разделяет эту строку на определенный символ, который затем разделяется на st

iЯ хочу скопировать этот вектор в AdditionalMsgs в какой-то момент, но я получаю ошибку во время выполнения, я не могу понять, почему.1014 * Вы видите что-нибудь неправильное?

Спасибо, Шамари

Ответы [ 3 ]

4 голосов
/ 27 февраля 2012

Звучит так, будто вы ищете std::back_inserter:

std::copy(st.begin(), st.end(), std::back_inserter(additionlMsgs));

Это добавит к additionlMsgs. Если вы хотите перезаписать его содержимое, вы можете использовать:

additionlMsgs = st;

Код, который вы сейчас имеете, никогда не добавляет новые элементы в additionlMsgs; он просто перезаписывает существующие без выполнения проверки границ. Если additionlMsgs слишком короткий, вы получите неопределенное поведение.

3 голосов
/ 27 февраля 2012

Если вы хотите добавить:

additionlMsgs.insert(additionlMsgs.end(), st.begin(), st.end());

Если вы хотите перезаписать:

additionlMsgs = st;
0 голосов
/ 28 февраля 2012

Использование resize, вероятно, является лучшим вариантом в этом случае.

additionlMsgs.resize(messages.size());
copy(st.begin(), st.end(), additionlMsgs.begin());

Это потому, что дополнительныеMsgs перераспределяются только один раз, а не несколько раз, когда используется back_inserter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...