将一个容器中的元素赋值给另一个不同类型的容器

预备知识:
1.c.assign(b,e):重新设置c的元素:将b和e标记的范围内的所有元素复制到c中。b和e必须不是指向c中元素的迭代器;
2.c.aggign(n,t):将容器c重新设置为存储n个值为t的元素;
3.assign操作首先删除容器中所有的元素,然后将其参数所指定的新元素插入到该容器中。如果在不同(或相同)类型的容器内,元素类型不相同但是相互兼容,则其赋值运算必须使用assign函数。例如,可通过assign操作实现将vector容器中一段char*类型的元素赋给string类型的list容器;
4.assign操作使左操作数容器的所有迭代器失效。


下面的程序将一个list容器中的所有元素赋值给一个vector容器,其中list容器中存储的是指向c风格字符串的char*指针,而vector容器的元素则是string类型(《C++ Primier》习题9.28)。

程序清单:

#include <iostream>
#include <vector>
#include <list>
#include <string>

using namespace std;

int main(int argc,char *argv[])
{
    char *sa[] = {"Yulingui","zhouyujia","gouyongpan","sunlin"};
    list<char*> clist(sa,sa+4);
    vector<string> svec;
    string str;

    /*将list对象中的所有元素赋值给vector对象*/
    svec.assign(clist.begin(),clist.end());

    /*输出list对象中的所有元素*/
    for (list<char*>::iterator lit=clist.begin();lit!=clist.end();
          ++lit)
    {
        cout<<*lit<<" ";
    }
    cout<<endl;

    /*输出vector对象中的所有元素*/
    for(vector<string>::iterator vit=svec.begin();vit!=svec.end();
        ++vit)
    {
        cout<<*vit<<" ";
    }
    cout<<endl;

    return 0;
}

编译运行程序后,输出结果:
Yulingui   zhouyujia   gouyongpan   sunlin   
Yulingui   zhouyujia   gouyongpan   sunlin  

作者: longmenyu   发布时间: 2010-12-20