C++:检查程序错误并修正

问题1

检查下面的程序是否有错误并修正.

1
2
3
4
5
6
vector<int> vec;
list<int> lst;
int i;
while(cin >> i)
    lst.push_back(i);
copy(lst.cbegin(),lst.cend(),vec.begin());

问题2

检查下面的程序是否有错误并修正.

1
2
3
vector<int> vec;
vec.reserve(10);//让vector预分配10个内存空间
fill_n(vec.begin(),10,0);

C++.
image-2092

源代码1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*************************************************************************
    > File Name: test.10.7.1.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年06月08日
 ************************************************************************/

#include<iostream>
#include<vector>
#include<list>
#include<algorithm>
using namespace std;

int main()
{
    //vector<int> vec;//此容器必须初始化,
    //并且与拷贝容器的元素数量一样多
    list<int> lst;
    int i;
    cout << "input number?" << endl;
    while(cin >> i)
    {
        lst.push_back(i);
    }
    vector<int> vec(lst.size(),0);//此处用拷贝容器元素数量
     //初始化同样数量的元素[0]
    /*
     大部分接受三个参数的算法,都假定第三个参数
     所属的容器与前两个参数所属的容器一样长!!
    */
    copy(lst.begin(),lst.end(),vec.begin());//执行拷贝.
    cout << "vector:size:" <<  vec.size()
    << " list:size: " << lst.size() << endl;
    return 0;
}

源代码2

切忌不可以对空容器进行修改操作!!!并且算法不会检查写入操作是否合法!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*************************************************************************
    > File Name: test.10.7.2.cpp
    > Author: puruidong
    > Mail: 1@w1520.com
    > Created Time: 2014年06月08日
 ************************************************************************/

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;

int main()
{
    //vector<int> vec;若未初始化容器,将无法实现修改元素1#
    vector<int> vec(10,10);
    vec.reserve(10);//若1#没有初始化容器,此处也没有预先分配内存空间,程序运行结果将是未定义的.
    fill_n(vec.begin(),10,0);//修改容器中的元素.
    //输出容器中的元素.
    for(vector<int>::const_iterator it=vec.begin();it!=vec.end();++it)
    {
        cout << *it << endl;
    }
    return 0;
}