#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
#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
评论列表