• vector


    1.声明:
    一个vector类似于一个动态的一维数组。
    vector<int> a;   //声明一个元素为int类型的vector a
    vectot<MyType> a;   //声明一个元素为MyType类型的vector a
    这里的声明的a包含0个元素,既a.size()的值为0,但它是动态的,其大小会随着数据的插入
    和删除改变而改变。
    vector<int> a(100, 0); //这里声明的是一已经个存放了100个0的整数vector
    2.向量操作
    常用函数:
    size_t size();             // 返回vector的大小,即包含的元素个数
    void pop_back();           // 删除vector末尾的元素,vector大小相应减一
    void push_back();          // 用于在vector的末尾添加元素
    T back();                  // 返回vector末尾的元素
    void clear();              // 将vector清空,vector大小变为0
    其他访问方式:
    cout<<a[5]<<endl;
    cout<<a.at(5)<<endl;
    以上区别在于后者在访问越界时会抛出异常,而前者不会。

    3.遍历
    for(vector<datatype>::iterator it=a.begin(); it!=a.end();it++)
     cout<<*it<<endl;
    for(int i=0;i<a.size;i++)
     cout<<a[i]<<endl;
    例:

    #include <string>
    #include <iostream>
    #include <vector>
    using namespace std;
    int         	intarray[10];   
    vector<int>     first_vector(intarray, intarray + 10);   
    vector<int>     second_vector(first_vector.begin(),first_vector.end());
    class  man   
    {   
    public:   
    	string    id;   
    	string    name;   
    };   
    int main()
    {
    	vector<man>  manList;   
    	man         thisman;   
    	thisman.id="2001";   
    	thisman.name="yourname";   
    	manList.push_back(thisman);   //加入一个元素     
    	manList.clear();           	 //清空 
    	return 0;
    }

    vector<struct>使用

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    struct NODE
    {
    	int m_nRoleID;
    	int m_nScore;
    	string m_strROleName;
    	NODE() :
    	m_nRoleID(1), m_nScore(0),m_strROleName("byfei")
    	{
    	}
    	NODE(const int nRoleID, const int nScore,const string strRoleName) :
    	m_nRoleID(nRoleID), m_nScore(nScore),m_strROleName(strRoleName)
    	{
    	}
    };
    
    void main()
    {
    	vector<NODE> v;
    	for (int i = 0; i < 10; i++)
    		v.push_back(NODE());
    	for (int i = 0; i < v.size(); i++)
    	{
    		v[i].m_nRoleID = 2;
    		v[i].m_nScore = 1;
    		v[i].m_strROleName = "byf";
    		cout<< v[i].m_nRoleID << " " << v[i].m_nScore <<" "<< v[i].m_strROleName << endl;
    	}
    	system("pause");
    }
    


     vector复制可以直接等于

    #include <vector>
    
    using namespace std;
    
    void main()
    {
    	vector<int> test01;
    	test01.push_back(2);
    	vector<int> test02 = test01;
    	printf("%d\n%d\n",test02.size(),test02[0]);
    	test02.push_back(3);
    	printf("%d\n",test01.size());
    	test01 = test02;
    	printf("%d\n",test01.size());
    	system("pause");
    }

    Vector 二维数组

    #include <vector>
    #include <iostream>
    #include <iterator>
    using namespace std;
    int main()
    {
    	int N = 2, M = 3;
    	vector<vector<int> > Matrix(N, vector<int> (M, 0));
    	ostream_iterator<int> os(cout, " ");
    	Matrix[0][2] = 4;
    	//交换矩阵的两行
    	Matrix[0].swap(Matrix[1]);
    	//交换矩阵第二行的两个元素
    	swap(Matrix[1][0], Matrix[1][2]);
    	for (int i = 0; i < Matrix.size(); i++)
    	{
    		copy(Matrix[i].begin(), Matrix[i].end(), os);
    		cout << endl;
    	}
    	system("pause");
    	return EXIT_SUCCESS;
    }
    
    #include <iostream>
    #include <vector>
    #include <iomanip>
    using namespace std;
    int main()
    {
    	int i, j;
    	//注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。
    	vector<vector<int> > vecInt(5, vector<int> (5,1));
    	for (i = 0; i < 5; i++)
    	{
    		for (j = 0; j < 5; j++)
    			cout <<vecInt[i][j];
    		cout << endl;
    	}
    	system("pause");
    	return 0;
    }
    

    当执行大数据量的调用push_back()的时候,记住要调用vector::reserve()。
    研究了vector和deque在插入数据的情况。通过这些假设,我们可以看出deque分配的空间是预先分配好的,deque维持一个固定增长率,在vector实验中我们考虑到应该调用vecor::reserve().然后在下面这个例子验证了我们的假设,在使用vector的时候调用reserve()能够膀子我们预先分配空间,这将是vector一个默认选择的操作。
    当你分配很多内存单元的时候,记住使用deque回收内存要比vector消耗时间多。
    探讨了vector和deque在回收非邻接内存块上的不同,分别证明了vector在分配内存的时候是线性增长,而deque是指数增长,同样,vector要回收的内存比deque多的多,如果你循环调用了push_back(),那么deque将获取大量的内存,而且是临近的。我们通过测试发现在分配内存单元消耗的时间和vector的时间接近。
    如果你计划使用insert(),或者需要pop_front(),那就使用deque。
    由于vector没有提供pop_front()函数,但在实验四的结果中可以看出没有insert()是非常好的,同时也告诉我们为什么deque在STL类中要作为单独的一个类划分出来。
    对于访问数据,vector::at()效率最高。
    统计的数据表示,所有访问数据方法的效率是非常接近的,但是vector::at()效率最高。这是因为最优的平衡图访问时间为最低的六个西格玛值。
    vector适用:对象数量变化少,简单对象,随机访问元素频繁
    list适用:对象数量变化大,对象复杂,插入和删除频繁

    vector 删除元素

    #include<iostream>
    #include <vector>
    using namespace  std;
    
    int main( )
    {  
    	vector<int>test;
    	test.push_back(100);
    	test.push_back(200);
    	test.push_back(300);
    	cout<<test[1]<<endl;
    	vector<int>::iterator itr= test.begin();
    	itr+=1;
    	test.erase(itr);
    	cout<<test[1]<<endl;
    	system("pause");
    	return 0;
    }


     



     

     

  • 相关阅读:
    个人管理:2,3月微薄整理
    ORM相关图片整理
    LmgORM项目 实体类转换器
    (转)Enterprise Architect 7.0入门教程
    禁止右键复制的代码
    UML示例图(转)学习
    Flash FMS Helloword
    模拟生成Guid
    Flash Media Server安装
    WebSphere创建删除概要文件
  • 原文地址:https://www.cnblogs.com/byfei/p/14104753.html
Copyright © 2020-2023  润新知