C++ primer 第四版 练习3.13,3.14

读一组整数到 vector 对象,计算并输出每对相邻元素的 和。如果读入元素个数为奇数,则提示用户后一个元素 没有求和,并输出其值。

vector<int> ivec;
    int ival;
    cout<<"Enter numbers(Ctrl + z to end) "<<endl;
    while(cin>>ival)
    {
        ivec.push_back(ival);
    }
    if(ivec.size() == 0)
    {
        cout<<"No elements"<<endl;
        return -1;
    }
    cout<<"Sum of each pair of adjacent element in the vector:"<<endl;
    for(vector<int>::size_type ix = 0;ix < ivec.size()-1;ix = ix + 2)
    {
        cout<<ivec[ix] + ivec[ix+1]<<"\t";
        if((ix+1)%6 == 0)
        {
            cout<<endl;
        }
    }
    if(ivec.size()%2 !=0)
    {
        cout<<endl;
        cout<<"The last element is not been summed"<<"and the value is "<<ivec[ivec.size()-1]<<endl;
    }

 

然后修改程序:头尾元素两两配 对(第一个和后一个,第二个和倒数第二个,以此类推), 计算每对元素的和,并输出。

vector<int> ivec;
    int ival;
    cout<<"Enter numbers(Ctrl + z to end) "<<endl;
    while(cin>>ival)
    {
        ivec.push_back(ival);
    }
    if(ivec.size() == 0)
    {
        cout<<"No elements"<<endl;
        return -1;
    }
    cout<<"Sum of each pair of adjacent element in the vector:"<<endl;
    vector<int>::size_type cnt =0;
    vector<int>::size_type first =0,last = ivec.size() -1;
    for(;first < last;++first,--last)
    {
        cout<<ivec[first] + ivec[last]<<"\t";
        ++cnt;
        if(cnt%6 == 0)
        {
            cout<<endl;
        }
    }
    if(first == last)
    {
        cout<<endl;
        cout<<"The last element is not been summed"<<"and the value is "<<ivec[first]<<endl;
    }

读入一段文本到 vector 对象,每个单词存储为 vector 中的一个元素。把 vector 对象中每个单词转化为大写字 母。输出 vector 对象中转化后的元素,每八个单词为一 行输出。

vector<string> svec;
    string str;
    cout<<"Enter numbers(Ctrl + z to end) "<<endl;
    while(cin>>str)
    {
        svec.push_back(str);
    }
    if(svec.size() == 0)
    {
        cout<<"No elements"<<endl;
        return -1;
    }
    cout<<"Transformed elements from the vector:"<<endl;

    for(vector<string>::size_type ix =0;ix != svec.size();++ix)
    {
        for(string::size_type index = 0;index != svec[ix].size();++index)
        
            if(islower(svec[ix][index]))
                svec[ix][index] = toupper(svec[ix][index]);
            cout<<svec[ix]<<" ";
        
        
        if((ix+1)%8 ==0)
        
            cout<<endl;
        
    }

 列出三种定义 vector 对象的方法,给定 10 个元素,每 个元素值为 42。指出是否还有更好的实现方法,并说明 为什么。

方法一:

vector<int> ivec(10,42);

方法二:

vector<int> ivec(10);
for(ix =0;ix != ivec.size() - 1;++ix )
{
      ivec[ix] = 42;

}

方法三:

vector<int> ivec(10);
for(vector<int> iterator iter = ivec.begin();iter != ivec.end();++ iter )
{
    *iter  =42;
}

方法四:

vector<int> ivec;
for(cnt = 1;cnt<=10;++cnt)
{
    ivec.push_back(42);  
}

方法五:

vector<int> ivec;
vector<int> iterator iter = ivec.end();
for(int i = 0;i<10;i++)
{
   ivec.insert(iter ,42);
   iter =  ivec.end();
}

以上是C++ primer给出的五种方法,书上说第4,5种方法更好些。因为他们使用标准库容器中定义的容器操作在容器中添加元素,无需再vector定义对象时指定容器的大小,比较灵活且不容易出错。

 

posted @ 2018-07-18 10:32  wxmwanggood  阅读(260)  评论(0编辑  收藏  举报