Oo缘来是你oO


人本是人,不必刻意去做人;世本是世,无须精心去处世;自然的才是快乐的。

posts - 11,comments - 8,trackbacks - 0

    C++ Primer 学习札记  

Ma Jia nan


一 顺序容器操作之插入(insert)
 
向容器中插入元素有以下几种形式:
 
1) 最一般的形式:

   vector<string> svec;
   list<string> slist;

   string s( "MaJianan" );
   slist.insert( slist.begin(), s );
   svec.insert( svec.begin(), s );

insert()将第二个参数(要被插入的值)插入到第一个参数(指向容器中某个位置的iterator)指向的位置的前面。

更为随机的插入操作可以如下实现:

   string s1( "yuanlaishini" );
   list<string>::iterator iter;

   iter = find( slist.begin(), slist.end(), s1 );
   slist.insert( iter, s1 );

find()返回被查找元素在容器中的位置,如果查找失败,返回end()iterator.
   
//slist.push_back( value )等价于   
slist.insert( slist.end(), value );

 

2) 在某个位置插入指定数量的元素.
   例如,在vector的开始处插入10个MaJianan:

   vector<string> svec;
   string mjn( "MaJianan" );

   svec.insert( svec.begin(), 10, mjn );

 

3)向容器插入一段范围内的元素:

 string sa[3] = { "MaJianan", "yuanlaishini", "blog.sina.com.cn"};

   //插入数组中的全部元素
   svec.insert( svec.begin(), sa, sa+3 );

   //插入数组中的部分元素
   svec.insert( svec.begin() + svec.size()/2, sa+1, sa+3 );  

 

4)通过一对iterator来标记带插入值的范围,可以是另一个vector

例一:
   //插入svec中含有的元素,从svec2中间开始
   svec2.insert( svec2.begin() + svec2.size()/2, svec.begin(), svec.end() );

   例二:
   //把sevc中的元素插入到slist中sValue的前面
   list<string> slist;
   list<string>::iterator iter = find( slist.begin(), slist.end(), sValue );
   slist.insert( iter, svec.begin(), svec.end() );


二 顺序容器操作之删除(erase)

1) 删除单个元素

list<string> slist;
... ...
sting sValue( "yuanlaishini" );
list<string>::iterator iter=find( slist.begin(), slist.end(), sValue );
if( iter!=slist.end() )
       slist.erase( iter );

 

2) 删除有一对iterator标记的一段范围内的元素

//删除所有元素
slist.erase( slist.begin(), slist.end() );

//删除部分元素
例一:
slist.erase( slist.begin()+slist.size()/2, slist.end() );

例二:
list<string>::iterator first, last;
first=find( slist.begin(), slist.end(). value1);
last=find( slist.begin(), slist.end(). value2);
//检验first和last的有效性
slist.erase( first, last );


3) 与push_back()相对应,pop_back()删除容器的末尾元素。


三 顺序容器操作之赋值(=)和对换(swap)

//slist1含有8个元素
//slist2含有16个元素
1)如果
slist1 = slist2;
 
  slist1拥有与被拷贝容器相同的元素数目---16.slist2有16个元素,没有变化。
  slist1中原来的8个元素被删除(调用string的析构函数)

2)如果 slist1.swap( slist2 );
 
  slist1现在有16个元素,而slist2函数slist1中原有的8个元素的拷贝
  如果两个容器长度不同,则重置容器的长度 


 

 

posted on 2006-09-14 10:07 马嘉楠 阅读(733) 评论(0)  编辑 收藏 引用 所属分类: 【01】C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理