随笔 - 40, 文章 - 0, 评论 - 9, 引用 - 0
数据加载中……

STL vector的使用

  http://www.cppreference.com/cppvector/index.html
assign
Syntax:
  #include <vector>
void assign( size_type num, const TYPE& val );
void assign( input_iterator start, input_iterator end );

The assign() function either gives the current vector the values from start to end, or gives it num copies of val.

This function will destroy the previous contents of the vector.

For example, the following code uses assign() to put 10 copies of the integer 42 into a vector:

vector<int> v;
 v
.assign( 10, 42 );
 
for( int i = 0; i < v.size(); i++ ) {
   cout
<< v[i] << " ";
 
}
 cout
<< endl;            

The above code displays the following output:

42 42 42 42 42 42 42 42 42 42          

The next example shows how assign() can be used to copy one vector to another:

vector<int> v1;
 
for( int i = 0; i < 10; i++ ) {
   v1
.push_back( i );
 
}              

 vector
<int> v2;
 v2
.assign( v1.begin(), v1.end() );            

 
for( int i = 0; i < v2.size(); i++ ) {
   cout
<< v2[i] << " ";
 
}
 cout
<< endl;            

When run, the above code displays the following output:

0 1 2 3 4 5 6 7 8 9     



Vector constructors
Syntax:
  #include <vector>
vector();
vector( const vector& c );
vector( size_type num, const TYPE& val = TYPE() );
vector( input_iterator start, input_iterator end );
~vector();

The default vector constructor takes no arguments, creates a new instance of that vector.

The second constructor is a default copy constructor that can be used to create a new vector that is a copy of the given vector c.

The third constructor creates a vector with space for num objects. If val is specified, each of those objects will be given that value. For example, the following code creates a vector consisting of five copies of the integer 42:

vector<int> v1( 5, 42 );         

The last constructor creates a vector that is initialized to contain the elements between start and end. For example:

// create a vector of random integers
 cout
<< "original vector: ";
 vector
<int> v;
 
for( int i = 0; i < 10; i++ ) {
   
int num = (int) rand() % 10;
   cout
<< num << " ";
   v
.push_back( num );
 
}
 cout
<< endl;            

 
// find the first element of v that is even
 vector
<int>::iterator iter1 = v.begin();
 
while( iter1 != v.end() && *iter1 % 2 != 0 ) {
   iter1
++;
 
}              

 
// find the last element of v that is even
 vector
<int>::iterator iter2 = v.end();
 
do {
   iter2
--;
 
} while( iter2 != v.begin() && *iter2 % 2 != 0 );              

 
// only proceed if we find both numbers
 
if( iter1 != v.end() && iter2 != v.begin() ) {
   cout
<< "first even number: " << *iter1 << ", last even number: " << *iter2 << endl;        

   cout
<< "new vector: ";
   vector
<int> v2( iter1, iter2 );
   
for( int i = 0; i < v2.size(); i++ ) {
     cout
<< v2[i] << " ";
   
}
   cout
<< endl;
 
}

When run, this code displays the following output:

original vector: 1 9 7 9 2 7 2 1 9 8
 first even number
: 2, last even number: 8
 
new vector: 2 7 2 1 9          

All of these constructors run in linear time except the first, which runs in constant time.

The default destructor is called when the vector should be destroyed.

 

posted on 2007-12-11 14:26 阅读(4017) 评论(2)  编辑 收藏 引用 所属分类: c++开发具体技术

评论

# re: STL vector的使用  回复  更多评论   

我用的是VS2005 环境.
如:for( int i = 0; i < v2.size(); i++ )
系统提示 int 和 size_type 转换 会丢失数据.

望看到回复 hanbo79@sogou.com
2008-08-16 11:25 | hb

# re: STL vector的使用  回复  更多评论   

size_type是unsigned类型比int大多了,可能被截断,所以你i声明为unsigned就可以了@hb
2008-08-16 12:20 | 沈臻豪(foxtail)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理