Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504730
  • 博文数量: 111
  • 博客积分: 3160
  • 博客等级: 中校
  • 技术积分: 1982
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:49
个人简介

低调、勤奋。

文章分类

全部博文(111)

文章存档

2014年(2)

2013年(26)

2012年(38)

2011年(18)

2010年(27)

分类: C/C++

2012-12-13 07:20:03

一、vector使用
头文件:#include
               using std::vector;

vector是一个类模版,而不是具体的类型。通过将类型放在类模版的<>里面,来指定类型。

如:vector ivec;   //类型:vector,变量名:ivec
       vector Sales_vec;

二、vector对象的定义和初始化

初始化vector

vector v1;   vector保存类型为T对象。
vector v1(v2);   v2是v1的一个副本。v3包含
vector v3(n,i);   v3包含n个值为i的元素。
vector v4(n); v4包含值初始化的元素的n个副本。

注意:复制vector对象时,两个vector必须保存同一种类型。

如:vector ivec1;
       vector ivec2(ivec1);

三、值初始化
如果未指定初始化值,由vector中元素的数据类型决定,如int为0,string将使用该类型的默认构造函数
创建元素初始化式。

四、vector对象操作

v.empty();               //如果为空,返回true
v.size();                   //v中元素个数
v.push_back(t);      //在末尾增加一个值为t的元素
v[n];                       //返回v中位置为n的元素
v1 = v2;                  //把v1的元素替换为v2中元素的副本
v1 == v2;                //如果v1和v2相当,则返回true
!=,<,<=,>,and >=

五、vector对象的size
成员函数size返回相应vector类定义的size_type值
vector::size_type  //0k
vector::size_type            //error

六、向vector中添加元素
string word;
vector text;
text.push_back(word);

七、vector下标操作
如:reset all elements to zero in the vector

for (vector::size_type ix = 0; ix != ivec.size(); ++ix)
{
ivec[ix] = 0;
}

八、下标操作不能添加元素

vector ivec; // 空的vector
for (vector::size_type ix = 0; ix != 10; ++ix)
{
ivec[ix] = ix; //错误
}

警告:仅对确知已存在的元素进行下标操作。

九、迭代器简介

容器的iterator类型:如 vector::iterator iter;
该语句定义了一个名为iter的变量,它的数据类型是vector定义的iterator类型。

每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,
由begin返回的迭代器指向第一个元素。

vector::iterator iter = ivec.begin();
如果vector不为空,则iter指向元素ivec[0];

由end操作返回的迭代器指向vector的末端元素的下一个。表明它指向了一个不存在的元素。
如果vector为空,则begin返回的迭代器和end返回的相同。

十、vector迭代器的自增和解引用运算

   迭代器类型使用解引用操作符,“*”来访问迭代器所指向的元素:

    *iter = 0;

   即 *iter 和 ivec[0] 指向同一元素。

   迭代器移动: iter++;

//迭代器操作
for (vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{
*iter = 0;
}
//下标操作
for (vector::size_type ix = 0; ix != ivec.size(); ++ix)
{
ivec[ix] = 0;
}

十一、const_iterator
该类型只能用于读取容器中的元素,不能修改。


点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <cctype>

  5. using namespace std;

  6. int main()
  7. {

  8.   vector<string> svec;

  9.   for (vector<string>::size_type ix = 0; ix != 10; ++ix)
  10.   {
  11.         svec.push_back("hello WORLD");
  12.   }

  13.   cout << "svec.size: " << svec.size() << endl;

  14.   if (svec.empty() == false)
  15.   {
  16.     cout << "vector contents: " << endl;

  17.     for (vector<string>::iterator iter = svec.begin();
  18.      iter != svec.end(); ++iter)
  19.      {
  20.         cout << *iter << endl;
  21.         
  22.      }
  23.   }

  24.   if (svec.size() == 0)
  25.   {
  26.         cout << "No elements!" << endl;
  27.         return -1;
  28.   }

  29.   cout << "ready each pair of elements;" << endl;

  30.   vector<string>::size_type cnt = 0;
  31.   for (vector<string>::iterator iter = svec.begin();
  32.                          iter != svec.end(); ++iter)
  33.     {
  34.        //转换成大写字母。采用string的特性,挨个字符遍历进行转换
  35.         for (string::size_type index = 0; index != (*iter).size(); ++index)
  36.         {
  37.             if (islower((*iter)[index]))
  38.             {
  39.                 (*iter)[index] = toupper((*iter)[index]);
  40.             }
  41.         }
  42.         cout << "change to:" << *iter << endl;
  43.         ++cnt;
  44.     }


  45. }

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <cctype>

  5. using namespace std;

  6. int main()
  7. {
  8.     vector<int> svec(10, 20); //1020

  9.     cout << "svec.size: " << svec.size() << endl;

  10.     if (svec.empty() == false)
  11.     {
  12.         cout << "vector contents: " << endl;
  13.         // print each element separated by a newline
  14.         for (vector<int>::size_type ix = 0;
  15.                           ix != svec.size(); ++ix)
  16.             cout << svec[ix] << endl;
  17.     }

  18.     if (svec.size() == 0)
  19.     {
  20.         cout << "No element?" << endl;
  21.         return -1;
  22.     }

  23.     
  24.     cout << "ready each pair of elements;" << endl;
  25.     
  26.     vector<int>::size_type cnt = 0;
  27.     for (vector<int>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
  28.     {
  29.         *iter = *iter * 2;
  30.         cout << "value is :" << *iter << endl;
  31.         ++cnt;
  32.     }

  33.     cnt = 0;
  34.     for (vector<int>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
  35.     {
  36.         cout << *iter << "\t";
  37.         ++cnt;
  38.         if (cnt % 6 == 0)
  39.             cout << endl;
  40.     }

  41.     if (svec.size() % 2 != 0)
  42.     {
  43.         cout << endl << "The last element is not been summed"
  44.      << "and it value is "
  45.      << *(svec.end() - 1) << endl;
  46.     }

  47.     

  48. }

阅读(654) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~