【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3651|回复: 0

[STL] 手把手教你stl之vector

[复制链接]
发表于 2009-3-1 01:51:36 | 显示全部楼层 |阅读模式
1.特点
优点: 随机访问、动态改变自身大小、快速地在序列尾部插入和删除元素
缺点: 在除头尾其它位置插入和删除元素效率降低(因为要移动元素以容纳新元素或回收被删除的空间)

#i nclude <vector>
using namespace std;
向量类模板 vector

2.声明
vector <数据类型> 对象名(大小, 初始值)
      例:
          vector <int> iVector(100, 0); //大小为100,类型为int,初始所有值为0.

3.访问
通过指示器 iterator(相当于C++里的指针)来操作.
声明
    vector <数据类型>::iterator 对象名
      例:
          vector <int>::iterator iter;
    
4.访问
遍历:
    for (iter=iVector.begin(); iter<iVector.end(); iter++);
      //*iter即为向量iVector里各项的值
取随机值
    iVector.at(下标);
  
5.插入元素(以下介绍都是vector类的成员函数)
    push_back(元素) //在尾部插入
      例:
          iVector.push_back(3);
  
    insert(iterator指针, 元素) //随机插入, iterator用来标明操作的位置
      例:
          vector <int>::iterator start;
          iVector.insert(start, 1);
      
insert(iterator指针, 个数, 元素) //把元素的n份拷贝到向量中指针所指定的位置
      例:
          vector <int>::iterator start;
          iVector.insert(start, 5, 1);
      
insert(iterator指针, iterator指针开始, iterator指针结尾) //将操作的范围内的值插入到指定位置
      例:
          vector <int>::iterator i, start, end;
          i    =iVector.begin();
          start=iVector.begin()+2;
          end =iVector.end()-3;
          iVector.insert(i, start, end);

6.删除元素(以下介绍都是vector类的成员函数)
    pop_back() //在尾部删除
      例:
          iVector.push_back();
  
erase(iterator指针) //随机删除
erase(iterator指针开始, iterator指针结尾)//删除范围内的值

7.vector中的交换 swap函数
void swap(vector<T, Alloc>& x) {
      __STD::swap(start, x.start);
      __STD::swap(finish, x.finish);
      __STD::swap(end_of_storage, x.end_of_storage);
}
是由于交换了 end_of_stroage的缘故 所以变小了

8. 如果vector的元素是指针,那么vector的删除不同于list,它不可以迭代期删除
        struct tagRecorderPlan
        {};

        std::vector<tagRecorderPlan*> m_plans;
        std::vector<tagRecorderPlan*>::iterator m_planiter;

        tagRecorderPlan * pplan = 0;
        for (m_planiter = m_plans.begin(); m_planiter != m_plans.end(); m_planiter++)
        {
            pplan = *m_planiter;
            delete pplan;
            pplan = 0;
        }

        m_plans.clear();

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-22 07:02

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表