C++中的vector使用范例

jackxiang 2008-1-17 11:07 | |
#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()

{

  int i = 0;

   vector<int> v;

   for( i = 0; i < 10; i++ )

  {

            v.push_back( i );//把元素一个一个存入到vector中

  }

  for( i = 0; i < v.size(); i++ )//v.size() 表示vector存入元素的个数

  {

         cout << v[ i ] << "  "; //把每个元素显示出来

  }

  cont << endl;

}

注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:

vector<int>::iterator iter;

for( iter = v.begin(); iter != v.end(); iter++ )

{
   cout << *iter << endl;
}

2. 对于二维vector的定义。

1)定义一个10个vector元素,并对每个vector符值1-10。

#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()
{
int i = 0, j = 0;

//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。

所以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。
vector< vector<int> > Array( 10, vector<int>(0) );

for( j = 0; j < 10; j++ )
{
 for ( i = 0; i < 9; i++ )
 {
  Array[ j ].push_back( i );
 }
}

for( j = 0; j < 10; j++ )
{
 for( i = 0; i < Array[ j ].size(); i++ )
 {
  cout << Array[ j ][ i ] << "  ";
 }
 cout<< endl;
}
}

2)定义一个行列都是变化的数组。

#include<stdio.h>
#include<vector>
#include <iostream>

using namespace std;

void main()
{
int i = 0, j = 0;

vector< vector<int> > Array;
vector< int > line;
for( j = 0; j < 10; j++ )
{
 Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。
 for ( i = 0; i < 9; i++ )
 {
  Array[ j ].push_back( i );
 }
}

for( j = 0; j < 10; j++ )
{
 for( i = 0; i < Array[ j ].size(); i++ )
 {
  cout << Array[ j ][ i ] << "  ";
 }
 cout<< endl;
}
}

上面就是我对vector使用的总结,更深入的使用,大家查查vector的手册吧。欢迎批评指正。

用std::vector的const_iterator对元素赋值会怎样?
c++ builder 6中就是改变不了元素的值,不会编译不过,执行也不报错。这玩意儿把我害惨了,害我找了好长时间。
有空测试下vc7.1,vc8和c++ builder 2007,gcc

写了个测试程序vc7.1下居然能改变值:
参考如下代码,就知道为何要这个vector了:
#include <vector>

struct stUpdateItem
{
   bool _downloadSucceeded;

   stUpdateItem() : _downloadSucceeded(false)
   {}
};

struct stDownItem
{
   stUpdateItem* _pItem;
   bool          _bPack;

   stDownItem(stUpdateItem* item, bool bPack) : _pItem(item),_bPack(bPack)
   {}
};

typedef std::vector<stDownItem> tDownItems;

int _tmain(int argc, _TCHAR* argv[])
{
   tDownItems downList;

   stUpdateItem item1;
   stUpdateItem item2;

   stDownItem downItem1(&item1,true);
   stDownItem downItem2(&item2,false);

   downList.push_back(downItem1);
   downList.push_back(downItem2);

   for (tDownItems::const_iterator it = downList.begin(); it != downList.end(); ++it)
   {
       if(true == it->_pItem->_downloadSucceeded)
       {
           std::cout << "before change, found!" << std::endl;
       }
   }

   for (tDownItems::const_iterator it = downList.begin(); it != downList.end(); ++it)
   {
       it->_pItem->_downloadSucceeded = true;
   }

   for (tDownItems::const_iterator it = downList.begin(); it != downList.end(); ++it)
   {
       if(true == it->_pItem->_downloadSucceeded)
       {
           std::cout << "after change, found!" << std::endl;
       }
   }
   return 0;
}

参考:http://stl.winterxy.com/html/item_26.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/870/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2008-1-17 11:19
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]