我有两个载体
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
答案 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。