试图复制矢量的所有元素

时间:2012-02-27 16:22:40

标签: c++ vector

我有两个载体

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

当用户输入字符串i然后将该字符串拆分某个字符,然后将其拆分为 st

我想在某些时候将该向量复制到 additionalMsgs ,但是我遇到运行时错误,我看不出原因。

我尝试将其复制如下

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

你能看到任何不正确的东西吗?

由于 Shamari

3 个答案:

答案 0 :(得分:4)

听起来你正在寻找std::back_inserter

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

追加添加到additionlMsgs。如果您希望覆盖其内容,您可能需要使用:

additionlMsgs = st;

您现在拥有的代码从未向additionlMsgs添加新元素;它只是覆盖现有的而不执行任何边界检查。如果additionlMsgs太短,则会出现未定义的行为。

答案 1 :(得分:3)

如果你想追加:

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

如果你想覆盖:

additionlMsgs = st;

答案 2 :(得分:0)

在这种情况下,使用resize可能是更好的选择。

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

这是因为additionalMsgs只重新分配一次,而不是多次使用back_inserter。