练习10.7 代码改错
下面代码是否有错,怎么改
1
vector<int> vec;
list<int> lst;
int i;
while (cin >> i)
lst.push_back(i);
copy(lst.cbegin(), lst.cend(), vec.begin());
算法总是通过迭代器操作容器,不能直接向容器添加删除元素,无法改变元素的大小。对于copy算法,目标序列至少要和源序列有一样多的元素,而这里vector是空的。如果要改变容器的大小,需要用叫做插入器的迭代器。
改成下面
int main(int argc, char* argv[])
{
list<int> lst {1, 2, 3, 4, 5};
vector<int> vec;
// back_insert
copy(lst.begin(), lst.end(), back_inserter(vec));
for (const auto& v : vec)
{
cout << v << endl;
}
}
2
vector<int> vec;
vec.reserve(10);
fill_n(vec.begin(), 10, 0);
虽然已经为vector分配了足够的空间,但是泛型算法对容器的要求并不是要足够的空间,而是有足够的元素。此时vector为空,没有任何元素,而算法不具备向容器添加元素的能力,这里依然使用back_insert让fill_n有能力向vec添加元素。
vector<int> vec;
vec.reserve(10);
fill_n(back_inserter(vec), 10, 100);
for (size_t i = 0; i < 10; i++)
{
cout << vec[i] << endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!