• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中vector容器的常用操作方法实例总结

C++中vector容器的常用操作方法实例总结

作者:古典小说网- 字体:[增加 减小] 来源:互联网 时间:2017-05-28

古典小说网- 通过本文主要向大家介绍了c++容器vector,c++中vector的用法,c++中vector,c++ vector,求c++中vector用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1 获得容器最后一个元素 

 ------ 使用 back或rbegin 取得

// back、rbegin 有常量和引用两种形式 
    std::vector<int> myVector; 
    myVector.back()=3; 
 
 
 
    std::vector<int>::reverse_iterator tailIter; 
    tailIter=myVector.rbegin(); 
    *tailIter=3 
</div>

2 删除某元素
需要删除某位置的元素,应使用iterator遍历, 不应使用at(i) 方式遍历,因为删除元素时,是根据iterator位置进行删除的。
删除元素时,返回值为:位于删除的元素之后的第一个的元素所在的位置

#include <vector> 
#include <iostream> 
 
int main( ) 
{ 
  using namespace std;   
  vector <int> v1; 
  vector <int>::iterator Iter; 
   
  v1.push_back( 10 ); 
  v1.push_back( 20 ); 
  v1.push_back( 30 ); 
  v1.push_back( 40 ); 
  v1.push_back( 50 ); 
 
  cout << "v1 =" ; 
  for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) 
   cout << " " << *Iter; 
  cout << endl; 
 
  v1.erase( v1.begin( ) ); 
  cout << "v1 ="; 
  for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) 
   cout << " " << *Iter; 
  cout << endl; 
 
  v1.erase( v1.begin( ) + 1, v1.begin( ) + 3 ); 
  cout << "v1 ="; 
  for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ ) 
   cout << " " << *Iter; 
  cout << endl; 
} 
</div>

输出:

v1 = 10 20 30 40 50
v1 = 20 30 40 50
v1 = 20 50
</div>

3  两vector 容易赋值时,不能通过=来赋值
而应使用遍历 或assign函数的方式来赋值

//delNode.vectorNode 是与delPositionVector同类型容器 
// vector 两容器不能直接赋值 可通过 遍历每个元素赋值,也可使用 assign赋值 
 
VectorNode delNode; 
 
delNode.numberOfFenkuai=nSelect; 
Node nodeTemp; 

</div>

错误赋值方式:

// 这是错误的赋值方式 
  delNode.vectorNode=delPositionVector ; 

</div>

正确赋值方式一: 遍历

for (int i=0;i<delPositionVector.size();i++) 
{ 
  nodeTemp=delPositionVector.at(i); 
  delNode.vectorNode.push_back(nodeTemp); 
} 
</div>

正确赋值方式二: assign函数

delNode.vectorNode.assign(delPositionVector.begin(),delPositionVector.end()); 

</div>

4  在指定的iterator位置 插入容器元素
插入某元素时,返回值为插入的那个元素所在的位置,原先处于此位置的元素将被顺次后移

iterator insert(
  iterator _Where,
  const Type& _Val
);
void insert(
  iterator _Where,
  size_type _Count,
  const Type& _Val
);
template<class InputIterator>
   void insert(
   iterator _Where,
   InputIterator _First,
   InputIterator _Last
  );
  
</div>

5 更新容器中的某个元素
办法之一:  先搜索到这个元素位置, 在此位置添加更新的元素,删除原先的元素
                       或搜索到此元素,删除此元素,在此元素位置上添加新元素
应用例子:

delNode.vectorNode.assign(delPositionVector.begin(),delPositionVector.end()); 
BOOL bInsert=FALSE; 
std::vector <VectorNode>::iterator iter; 
for (iter=g_DelVector.begin();iter!=g_DelVector.end();iter++) 
{ 
  if ((*iter).numberOfFenkuai==nSelect) 
  { 
    bInsert=TRUE; 
    //g_DelVector.erase(iter); 
    //g_DelVector.insert(iter,delNode); 
    iter=g_DelVector.insert(iter,delNode); 
    iter=g_DelVector.erase(iter+1); 
    iter--; 
    break; 
  } 
} 
 
 
if (!bInsert) 
{ 
  g_DelVector.push_back(delNode); 
} 
</div>

 
6 push_back或pop某元素后,迭代器会失效  需要重新获得

STL中的vector不是关联性容器,当插入新的元素后,原来取得的迭代器就会失效。

std::vector<int> vNum; 
vNum.push_back(1); 
vNum.push_back(3); 
vNum.push_back(5); 
std::vector<int>::iterator pIt = vNum.begin(); 
std::cout << "Before insert a new number: " << *pIt << std::endl; 
vNum.push_back(7); 
std::cout << "After insert a new number: " << *pIt << std::endl;  // Oh! No! 

</div>

注意最后一句,运行到最后一句时就会发生崩溃,迭代器访问错误。插入元素后,要重新取得迭代器。

而对于map这样的关联性容器,插入新元素后,原来的迭代器仍然会有效。
例子如下:

std::map<int, int> mNum; 
mNum[0] = 0; 
mNum[1] = 1; 
mNum[2] = 2; 
std::map<int, int>::iterator pIt = mNum.begin(); 
std::cout << "Before insert a new number: (" << pIt->first << ", " << pIt->second << ")" << std::endl; 
mNum[3] = 3; 
std::cout << "After insert a new number: (" << pIt->first << ", " << pIt->second << ")" << std::endl; // OK! 

</div>

7 合并两个顺序容器

std::vector<line>::iterator i1 = v1.begin(), i2 = v2.begin(); 
while(i1 != v1.end() && i2 != v2.end()) 
{ 
  if(i1->index == i2->index) 
  { 
    line t = { i1->index, i1->value1, i2->value2 } 
    v3.push_back(t); 
    ++i1; 
    ++i2; 
  } 
  else if(i1->index > i2->index) 
  { 
    i2->value1 = 0; 
    v3.push_back(*i2); 
    ++i2; 
  } 
  else 
  { 
    i1->value2 = 0; 
    v3.push_back(*i1); 
    ++i1; 
  } 
} 
 
while(i1 != v1.end()) 
  v3.push_back(*(i1++)); 
 
while(i2 != v2.end()) 
  v3.push_back(*(i2++)); 

</div>

9 排序

// alg_sort.cpp 
// compile with: /EHsc 
#include <vector> 
#include <algorithm> 
#include <functional>   // For greater<int>( ) 
#include <iostream> 
 
// Return whether first element is greater than the second 
bool UDgreater ( int elem1, int elem2 ) 
{ 
  return elem1 > elem2; 
} 
 
int main( ) 
{ 
  using namespace std; 
  vector <int> v1; 
  vector <int>::iterator Iter1; 
 
  int i; 
  for ( i = 0 ; i <= 5 ; i++ ) 
  { 
   v1.push_back( 2 * i ); 
  } 
 
  int ii; 
  for ( ii = 0 ; ii <= 5 ; ii++ ) 
  { 
   v1.push_back( 2 * ii + 1 ); 
  } 
 
  cout << "Original vector v1 = ( " ; 
  for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) 
   cout << *Iter1 << " "; 
  cout << ")" << endl; 
 
  sort( v1.begin( ), v1.end( ) ); 
  cout << "Sorted vector v1 = ( " ; 
  for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) 
   cout << *Iter1 << " "; 
  cout << ")" << endl; 
 
  // To sort in descending order. specify binary predicate 
  sort( v1.begin( ), v1.end( ), greater<int>( ) ); 
  cout << "Resorted (greater) vector v1 = ( " ; 
  for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) 
   cout << *Iter1 << " "; 
  cout << ")" << endl; 
 
  // A user-defined (UD) binary predicate can also be used 
  sort( v1.begin( ), v1.end( ), UDgreater ); 
  cout << "Resorted (UDgreater) vector v1 = ( " ; 
  for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) 
   cout << *Iter1 << "



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中vector和map的删除方法(推荐)
  • C++中vector容器的用法
  • C++中vector容器使用详细说明
  • C++实现 vector 的四则运算
  • C++中vector容器的常用操作方法实例总结
  • C++中vector的用法实例解析

相关文章

  • 2017-05-28C++画正弦线实例代码
  • 2017-05-28C++实现二叉树非递归遍历方法实例总结
  • 2017-09-13C++项目中的extern "C" {}
  • 2017-05-28关于C语言除0引发的思考
  • 2017-05-28C 语言基础教程(我的C之旅开始了)[六]
  • 2017-05-28C++访问注册表获取已安装软件信息列表示例代码
  • 2017-05-28VC下通过系统快照实现进程管理的方法
  • 2022-04-30C语言运算符的优先级和结合性
  • 2017-05-28数据结构之红黑树详解
  • 2017-05-28C++编程中的const关键字常见用法总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入分析C++中类的大小
    • 详解C语言中const关键字的用法
    • c++显式类型转换示例详解
    • 详解C语言中结构体的自引用和相互引用
    • 解析C++中的虚拟函数及其静态类型和动态类型
    • 浅析C语言中sscanf 的用法
    • C++面试题之数a、b的值互换(不使用中间变量)
    • c语言实现奇偶排序算法
    • C语言获取消耗内存的方法
    • C语言中的强符号和弱符号介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有