关闭

C++ vector笔记

251人阅读 评论(0) 收藏 举报
分类:

vector是C++标准模板库中的内容,它是一个容器,简单地说,就是一个能够存放任意类型的动态数组,可以动态改变大小。

1、包含头文件#include<vector>


2、变量声明:vector<int>vec(100);  代表vec可以存放100个int类型的数据,于是,它可以像普通数组一样访问

       ps 二维数组:vector <int*>vec;


3、迭代器类型:vector容器类的迭代器类型为一个名为iterator的typedef,其作用域为整个类,其行为可以看成是指针。

    例如:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int>::iterator it;
	vector<int>vec(6);
	for(int i=0;i<6;i++)
	{
		int a;
		cin>>a;
		vec.push_back(a);//cin>>vec[i];
	}
	for(it=vec.begin();it!=vec.end();it++)
	{
		*it=2; //使用 * 访问迭代器所指向的元素
	}
	for(int i=0;i<6;i++)
		cout<<vec[i]<<' ';
	return 0;
}

这串代码实现了数据的输入、修改与输出。


3、一些基本操作

push_back(a)     

通过上述代码我们也可以知道,该方法的作用是将元素添加到矢量尾,在编写程序时,无需了解元素的数目,只要能够取得足够的内存,程序就可以根据需要增加vec的长度。
erase(a)   

删除a位置的数据,也可以接受两个迭代器参数,定义要删除的区间。例如:

     vec.erase(vec.begin(),vec.end())即为删除[begin,end)区间(注意左闭右开)。也可以使用两个迭代器表示。

Insert(pos,elem)

可以在pos位置插入elem。该方法也接受三个迭代器参数,第一个指定新元素的插入位置(前面),第二、三个定义了被插入区间

   例如:

vector<int>old_v;
vector<int>new_v;
...
old_v.insert(old_v.end(),new_v.begin()+1,new_v.end());
该代码将新元素插入到old.end()前面,即矢量最后一个元素的后面。

可以在容器中装入自定义的数据类型

例如定义一个class Myclass{}后;我们就可以定义一个存放class 的容器vetor<Myclass>vec;

定义容器时可以赋初值:vector<int>vec(100,0)即定义了一个容量为100的容器,并赋初值0。并且,我们可以把一个容器的对象赋值给另一个容器: vec2 = vec;

clear() 

移除容器中所有数据

empty()   

判断容器是否为空

front()   

传回第一个数据

pop_back()  

删除最后一个数据

resize(num)  

重新设置该容器的大小

begin() 

返回容器中第一个元素的迭代器,end()同理

size()  

返回容器中的数据个数

下面是一个例子便于我们理解上述方法的用法

#include <iostream>
#include <string>
#include <vector>
using namespace std; 

struct Review {
    string title;
    int rating;
}temp;

bool FillReview(Review & rr)
{
    cout << "Enter book title ('quit' to quit): ";
    getline(cin,rr.title);
    if (rr.title == "quit")
        return false;
    cout << "Enter book rating: ";
    cin >> rr.rating;
    if (!cin)
        return false;
    // get rid of rest of input line
    while (cin.get() != '\n')
        continue;
    return true;
}

void ShowReview(const Review & rr)
{
    cout << rr.rating << "\t" << rr.title << endl; 
}

int main()
{
    vector<Review> books;
    while (FillReview(temp))
        books.push_back(temp);
    int num = books.size();
    if (num > 0)
    {
        cout << "Thank you. You entered the following:\n"
            << "Rating\tBook\n";
        for (int i = 0; i < num; i++)
            ShowReview(books[i]);
        cout << "Reprising:\n"
            << "Rating\tBook\n";
        vector<Review>::iterator pr;
        for (pr = books.begin(); pr != books.end(); pr++)
            ShowReview(*pr);
        vector <Review> oldlist(books);     // copy constructor used
        if (num > 3)
        {
            // remove 2 items
            books.erase(books.begin() + 1, books.begin() + 3);
            cout << "After erasure:\n";
            for (pr = books.begin(); pr != books.end(); pr++)
                ShowReview(*pr);
            // insert 1 item
            books.insert(books.begin(), oldlist.begin() + 1,
                        oldlist.begin() + 2);
            cout << "After insertion:\n";
            for (pr = books.begin(); pr != books.end(); pr++)
                ShowReview(*pr);
        }
        books.swap(oldlist);
        cout << "Swapping oldlist with books:\n";
        for (pr = books.begin(); pr != books.end(); pr++)
            ShowReview(*pr);
    }
    else
        cout << "Nothing entered, nothing gained.\n";
    // cin.get();
	return 0;
}


2
0
查看评论

机器学习技法 笔记一 linear support vector machine

//回家也几天了,在家里吃吃吃,堕落了几天,还是决定要学习一下=。= //毕业找不到工作怎么办=。= //机器学习基石的后面几章的笔记,一直没写,后面补上吧,现在还是开始我们的机器学习技法,不得不说,这门mooc质量真的很高。 今天看的是linear support vector machin...
  • u011954647
  • u011954647
  • 2016-02-03 16:52
  • 1193

c++,vector的[]和at区别

std::vector<int> a; std::cout<<a.size();上面输出是0.容器初始化什么都不做,大小为0; std::vector<int> a; // std::cout<<a.size(); a[0]...
  • yxccc_914
  • yxccc_914
  • 2017-02-03 11:40
  • 803

C++ vector 实现二维数组

简介 在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组。本文主要是关于使用Vector初始化、遍历方面的内容。其他二维的思想也是类似的。 1.初始化 (1)利用Vector的push_back函数vector<vector<int>&...
  • a819825294
  • a819825294
  • 2016-08-01 20:25
  • 13927

C++如何合并若干个vector

如何合并若干个vector 例:  vector vec1 = {...}; vector vec2 = {...};// vec1和vec2都存有内容 vector vec3;//vec3是空的 vec3.insert(vec3.end(),vec1...
  • tsyccnh
  • tsyccnh
  • 2014-12-07 15:35
  • 7136

实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())

关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了。是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除...
  • wangshubo1989
  • wangshubo1989
  • 2015-12-19 21:18
  • 14802

vector 详细用法 C++

使用STL的三个境界:能用,明理,能扩展。本文属于第一个境界,如果结合了《STL源码解析》,则达到了第二个境界, 如果项目中有需要,对STL进行了扩展则就达到了第三个境界! 如果希望深刻理解vector的这些个成员函数,最好的办法是详细了解其内部实现,《STL源码解析》是个好途径!当然,也可以 直接...
  • sangyongjia
  • sangyongjia
  • 2016-04-11 20:54
  • 6555

C++ 一条代码打印vector内容以及random_shuffle函数

#include #include #include #include using namespace std; int main (int argc, char *argv[]) { int n = 10; vector v; //append integers 0 to n-...
  • cywosp
  • cywosp
  • 2012-03-04 16:13
  • 9346

C++中的vector使用范例

前几天一个同学问我c++里面的vector的使用,我研究了一下,先总结如下:1.vector 的数据的存入和输出:#include#include#include using namespace std;void main(){   int i = 0;  &...
  • tjh666
  • tjh666
  • 2007-05-11 10:18
  • 61328

C++ Vector 使用心得 --- 非常好的总结

C++ Vector 使用心得 分类: C/C++2013-12-13 08:16 102人阅读 评论(0) 收藏 举报 原文链接:http://software.intel.com/zh-cn/blogs/2011/08/10/c-vec...
  • u013321328
  • u013321328
  • 2014-03-10 21:27
  • 1390

实例C++ vector使用方法

做TC才开始使用vector,因为TC提交东西都要用VECTOR 直接用各种小例子和小tip展示一下vector的使用 vector中的元素有类似数组的指针叫iterator,这个东西就当数组指针用就是了,另外这个东西支持+和-操作,对应数组后移一位和前移一位 1.vector的定义 下面是四种定...
  • z3635363
  • z3635363
  • 2013-09-20 14:22
  • 1096
    个人资料
    • 访问:44323次
    • 积分:1390
    • 等级:
    • 排名:千里之外
    • 原创:88篇
    • 转载:1篇
    • 译文:0篇
    • 评论:19条
    最新评论