C++STLvector

一、构造函数

1)、vecto<T> v; //创建一个空的vector<T>对象,这个对象的元素的类型为T,T是需要指定的。

2)、vector<T>  v(n); //创建一个vector<T>对象,v.size()为n, 每个元素的值都会是系统默认的值,如果T是类,就会是默认构造函数来初始化。

3)、vector<T> v(n, value);//跟第二个差不多,区别就是初始化不是默认值,而是用指定的value值来初始化这N个元素

4)、vector<T> v(iter1, iter2);//用迭代器来指定一个范围内的元素来初始化。如:

          vector<int> v;
          for (int i = 1; i <= 10; i++)
                 v.push_back(i);
          vector<int> v1(v.begin(), v.end());

二、常用的操作

v.push_back(value);//把value放到对象v的末尾

v.pop_back(); //把对象v的末尾的值删除,并缩减其容量

v.capacity();//返回v的容量

v.max_size();//返回v最大可以存放的元素的个数

v.size();//返回v中元素的个数

v.empty();//如果v中元素个数为0,那么就返回true,否则返回false

v.reserve(n, value);//设置v的容量为n,那么原来如果为m, m < n, 则m-n这些元素都用value来初始化

v.front();//返回v的第一个元素

v.back();//返回v的最后一个元素

v1.swap(v2);//交换v1\v2的内容

v.clear();//清空所有元素,并将其容量变为0

v.begin();//返回指向第一个元素的迭代器

v.end();//返回指向最后一个元素之后的迭代器

v.rbegin();//返回指向最后一个元素的迭代器

v.rend();//返回指向第一个元素之前的迭代器

v.insert(iterator, value);//在迭代器iterator指向的元素之前插入value

v.insert(iterator, n, value);//在迭代器iterator指向的元素之前插入n个value

v.earse(iterator);//删除迭代器iterator指向的元素删除掉

v.earse(iteBegin, iteEnd);//删除两个迭代器指定的范围内的元素

v[i] //像数组一样来访问元素,但是不会进行越界检查,跟数组一样不检查的

v.at(i);//返回v中下标为i的元素。这个成员函数会起先越界检查,如果越界会抛出out_of_range

如:

try

{

        for (int i = 0; i <= v.size(); i++)

              cout << v.at(i) << " ";

 }

catch (out_of_range)

{

        cout << "out of range" << endl;

}    

//那么这里就是输出out of range.

三、重载的运算符

1、 v1 = v2; //调用复制构造函数来完成赋值

2、v1 == v2; //按字典顺序来比较,如果相等,返回true。下面的几个也一样的道理

3、v1 < v2;

4、v1 > v2;

5、v1 != v2

四、迭代器部分

1、定义一个迭代器,有const的是用const限定的迭代器,不允许修改通过*来修改其值,

      有reverse的是逆序迭代器

  vector<int>::iterator it = v.begin(); //

  vector<int>::const_iterator cit = v.begin();

  vector<int>::reverse_iterator rit = v.rbegin();

  vector<int>::const_reverse_iterator crit = v.rbegin();

这样定义以后可以执行以下操作:

++it 、--it、*it、=、 == 、 !=、+、-、【】

顺序输出元素:

for (vector<int>::const_iterator cit = v.begin(); cit != v.end(); cit++)

       cout << *cit << " ";

cout << endl;

逆序输出元素:

for (vector<int>::const_reverse_iterator crit = v.rbegin(); crit != v.rend(); crit ++)

     cout << *crit << " ";

cout << endl;

五、创建二维vector对象

1)、const int ROWS = 3, COLUMNS = 4;

vecotor< vecotr<double> > table(ROWS,  vector<double> (COLUMNS, 0.0));

//创建了一个3*4的矩阵,其中的vector<double> (COLUMNS, 0.0);是创建一个临时对象,其元素个数为COLUMNS, 每个元素值为0.0;

2)、单下标访问

table[0];//这是第一行

3)、双下标

table[0][0];//table 表中的第一行第一列对象的元素

4、size()方法

table.size();//返回的是行数

table[r].size();//返回的是列数

5、遍历二维表

for (int row = 0; row < table.size(); row++)

     for (int col = 0; col < table[row].size(); col++)

            cout << table[row][col] << "  ";

cout << endl;

6、使用push_back()成员函限乘

加入一行:table.push_back(vector<double> (COLUMNS, 0.0));

在每行末尾直接加一个元素:

for (int row = 0; row < table.size(); row++)

      table[row].push_back(0.0);

创建不规则二维表

vecotor< vecotor<double> > table;

for (int col = 1; col <= 3; col++)

     table.push_back(vector<double> (col, 0.0));   

结果如图:

0.0

0.0 0.0

0.0 0.0 0.0

六、常见的错误

1、vector<int> v; 

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

     v[i] = i;

//知道错在哪里了吗?因为v是一个空的对象,它的容量大小为0,这是不允许使用下标来赋值的。

//解决办法有两种:

 第一种:使用push_back()成员函数,这个函数会自动扩展其容量以适应新的元素

 第二种:使用reserve()成员函数来预留容量。

 

2、在使用迭代器的时候一定要注意,每次使用之后会有可能改变了指向,所以一定要注意,

最好在每次使用的都重新让他指向你需要的地方。

时间: 2024-09-08 10:38:50

C++STLvector的相关文章

STL---vector

1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 typedef vector<int> INTVECTOR;//自定义类型INTVECTOR 5 //测试vector容器的功能 6 int main() 7 { 8 //vec1对象初始为空 9 INTVECTOR vec1; 10 //vec2对象最初有10个值为6的元素 11 INTVECTOR vec2(10,6); 12 //v

gsoap开发webservice

gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多.绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库.与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来. gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构

标准C/C++程序通过gSOAP调用WebService

一.环境准备 在本文中,所有程序均在Linux下开发完成,经测试能够正常运行. 在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得: http://www.cs.fsu.edu/~engelen/soap.html 我下载的是gsoap_2.7.12.tar.gz 下载下来解压缩,按正常安装过程进行编译.安装. # tar zxvf gsozp_2.7.12.tar.gz # cd gsoap_2.7.12 # ./configure –-prefix=/usr/local/gSOAP

C++ 嵌入、扩展Python的开发库 ffpython

问题描述 Python 是最流行的脚本之一,并且python拥有定义良好的C API接口,同时又有丰富的文档,与C++结合非常的适合.通常情况下使用C++封装机制,而用python脚本实现策略或者是控制.使用python和C++结合的技术拥有如下优势: • 主体系统使用C++实现,保持系统的高效. • 控制部分使用python,增加开发效率,python的内存垃圾回收,丰富的类库都使C++开发者获益匪浅. • Python脚本可以运行期重载,可以实现控制部分不停机热更新. C++与python的