下面代码是否有错,怎么改
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;
}
标签:10,元素,10.7,练习,back,改错,lst,vector,vec
From: https://www.cnblogs.com/yuzuki/p/17574918.html