C++ vector (向量)(二)

2014-11-24 12:52:39 · 作者: · 浏览: 1
rator rbegin() const;

reverse_iterator rbegin();

const_reverse_iterator rend() const;

reverse_iterator rend();

vector对象的比较(非成员函数)

针对vector对象的比较有六个比较运算符:operator==、operator!=、operator<、operator<=、operator>、operator>=。

其中,对于operator==和operator!=,如果vector对象拥有相同的元素个数,并且对应位置的元素全部相等,则两个vector对象相等;否则不等。

对于operator<、operator<=、operator>、operator>=,采用字典排序策略比较。

注:其实只需要实现operator==和operator!=就可以了,其它可以根据这两个实现。因为,operator!= (lhs, rhs) 就是!(lhs == rhs),operator<=(lhs, rhs) 就是!(rhs < lhs),operator>(lhs, rhs) 就是(rhs < lhs),operator>=(lhs, rhs) 就是!(lhs, rhs)。

vector类的迭代器

vector类的迭代器除了支持通用的前缀自增运算符外,还支持算术运算:it + n、it - n、it2 - it1。注意it2 - it1返回值为difference_type(signed类型)。

注意,任何改变容器大小的操作都可能造成以前的迭代器失效。

应用示例

#include

#include

#include

using namespace std;

int main()

{

vector v(5, "hello");

vector v2(v.begin(), v.end());

assert(v == v2);

cout<<"> Before operation"<

for(vector::const_iterator it = v.begin(); it < v.end(); ++it)

cout<<*it<

v.insert(v.begin() + 3, 4, "hello, world");

cout<<"> After insert"<

for(vector::size_type i = 0; i < v.size(); ++i)

cout<

vector::iterator it = v.erase(v.begin() + 3, v.begin() + 6);

assert(*it == "hello, world");

cout<<"> After erase"<

for(vector::size_type i = 0; i != v.size(); ++i)

cout<

assert(v.begin() + v.size() == v.end());

assert(v.end() - v.size() == v.begin());

assert(v.begin() - v.end() == -vector::difference_type(v.size()));

return 0;

}

程序说明:上面程序中用了三个循环输出容器中的元素,每个循环的遍历方式是不一样的。特别需要说明的是,第二个循环在条件判断中使用了size() 函数,而不是在循环之前先保存在变量中再使用。之所以这样做,有两个原因:其一,如果将来在修改程序时,在循环中修改了容器元素个数,这个循环仍然能很好地工作,而如果先保存size()函数值就不正确了;其二,由于这些小函数(其实现只需要一条返回语句)基本上都被声明为inline,所以不需要考虑效率问题。

---------------------------------

c++编程语言中有一种叫做Vector的应用方法,它的作用在实际编程中是非常重要的。在这里我们将会为大家详细介绍一下C++ Vector的相关应用技巧及基本内容,希望能给大家带来一些帮助。

(1)vector< 类型> 标识符;

(2)vector< 类型> 标识符(最大容量) ;

(3)vector< 类型> 标识符(最大容量,初始所有值);

(4) int i[4] = {12,3,4,5};

vector< 类型> vi(i , i+2); //得到i索引值为3以后的值 ;

(5)vector< vector > //vi 定义2维的容器;记得一定要有空格,不然会报错

vector< int > line

// 在使用的时候一定要首先将vi个行进行初始化;

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

{

vector.push_back(line);

}

/// 个人认为使用vector定义二维数组很好,

因为是长度可以不预先确定。很好。

(6)C++ Vector排序

vector< int > vi ;

vi.push_back(1);

vi.push_back(3);

vi.push_back(0);

sort(vi.begin() , vi.end()); /// /小到大

reverse(vi.begin(),vi.end()) /// 从大道小

(7)顺序访问

vector < int > vi ;

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

{

vector.push_back(i);

}

for(int i = 0 ; i < 10 ; i ++) /// 第一种调用方法

{

cout <

}

for(vector::iterator it = vi.begin() ;

it !=vi.end() ; it++) ///第二种调用方法

{

cout << *it << " " ;

}

(8)寻找

vector < int > vi ;

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

{

vector.push_back(i);

}

vector < int >::interator it = find(vi.begin() , vi.end,3) ;

cout << *it << endl ; ///返回容器内找到值的位置。

(9)使用数组对C++ Vector进行初始化

int i[10] ={1,2,3,4,5,6,7,78,8} ;

///第一种

vector vi(i+1,i+3); ///从第2个元素到第三个元素

for(vector ::interator it = vi.begin() ;

it != vi.end() ; it++)

{

cout << *it <<" " ;

}

(10) 结构体类型

struct temp

{

public :

string str ;

public :

int id ;

}tmp

int main()

{

vector t ;

temp w1 ;

w1.str = "Hellowor" ;

w1.id = 1 ;

t.push_back(t1);

cout << w1.str << "," <

return 0 ;

}