欢迎使用CSDN-markdown编辑器 fdsdf



个人分类






  • c++/c 48篇



  • 算法 33篇



  • linux操作系统 27篇



  • python 4篇



  • 网络编程 28篇



  • Java 1篇



  • STM32-ARM嵌入式 7篇



  • 面试 11篇



  • HTTP 1篇



  • 杂谈 3篇



  • 编译原理 2篇



  • warning and error 2篇



  • 四旋翼 2篇



  • Protues-汇编 1篇



  • Linux软件 1篇



  • FTP 1篇



  • 测试 3篇



  • 心神沉醉 1篇




展开




归档







  • 2016年11月 1篇




  • 2016年10月 10篇




  • 2016年9月 15篇




  • 2016年8月 29篇




  • 2016年7月 20篇




  • 2016年6月 5篇




  • 2016年5月 9篇




  • 2016年4月 10篇




  • 2016年3月 26篇




  • 2016年2月 12篇




  • 2016年1月 14篇




  • 2015年12月 5篇




  • 2015年11月 4篇




展开




热门文章





  • 四旋翼无人机飞行器基本知识(四旋翼无人机结构和原理+四轴飞行diy全套入门教程)

    阅读量:97842



  • bind:address already in use的深刻教训以及解决办法

    阅读量:21114



  • stm32简说步进电机(有代码)!!!

    阅读量:20321



  • C++ vector用法(详解!!函数,实现)

    阅读量:14334



  • 127.0.0.1和localhost和本机IP三者的区别!!!

    阅读量:13132






最新评论





  • 窗口滑动协议的简单理解


    M_Syple:所以,答案选C。。。。



  • printf函数参数的执行顺序的简…


    silinga:无论在什么系统printf的执行顺序都是从右至左,只不过编译器不同,程序内存分配方式不同,i++对…



  • c中定义变量的内存分配顺序问题(极…


    z914022466:一是因为栈是从高地址向下的。二是因为是小端模式。都是操作系统的基础知识吧



  • warning: format ‘…


    qq_34997333:感谢分享,这个解决警告的思路很好。



  • stm32简说步进电机(有代码)!…


    qq_37978624:按键有什么用在里面?主函数里都没有按键程序,这程序能跑?





("a.flexible-btn").click(function(){ ("a.flexible-btn").click(function(){ (this).parents('div.aside-box').removeClass('flexible-box'); $(this).remove(); })
C++ vector用法(详解!!函数,实现)

1,简述一下vector的基本操作,它的size,capacity(),clear,reverse,reserve,

  push_back等!!!

2,说说,vector的存储特性,是顺序存储还是如同链表般,如果是顺序存储的话,那么是如何执行

  erase,insert等函数,???(假如后面的空间不够的话,我们需要合理的算法来重新找出一块

  相应的空间吗???拷贝,回收吗???是不是特别麻烦),如果是链式存储的话,那么它又是如何做到快速

  的访问的(通过下标来的)!!!


1 基本操作

(1)头文件#include.

(2)创建vector对象,vector vec;

(3)尾部插入数字:vec.push_back(a);

(4)使用下标访问元素,cout<

(5)使用迭代器访问元素.

    

[cpp] view plain copy
print ?
  1. “font-size:18px;”>vector<int>::iterator it;  
  2. for(it=vec.begin();it!=vec.end();it++)  
  3.     cout<<*it<  
vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
    cout<<*it<

(6)插入元素:    vec.insert(vec.begin()+i,a);在第i个元素后面插入a;

(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

        vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:vec.size();

(9)清空:vec.clear()   //清空之后,vec.size()为0


一个简单的程序:

[cpp] view plain copy
print ?
  1. “font-size:18px;”>#include  
  2. #include  
  3. #include  
  4. using namespace std;  
  5. int main()  
  6. {  
  7.         int i=0;  
  8.         vector<int> vec;  
  9.         for(i=0; i<10; i++)  
  10.         {  
  11.                 vec.push_back(i);   //10个元素依次进入,结果为10  
  12.         }  
  13.   
  14.         for(unsigned int i=0; i
  15.         {  
  16.         cout<<”初始化遍历:”<
  17.         }  
  18.         //结果为:0,1,2,3,4,5,6,7,8,9  
  19.         vector<int>::iterator it;  
  20.   
  21.         for(it = vec.begin(); it!=vec.end(); it++)  
  22.         {  
  23.         cout<<”迭代遍历:”<<*it<
  24.         }  
  25.   //结果为:0,1,2,3,4,5,6,7,8,9  
  26.    vec.insert(vec.begin()+4,0);  
  27.   //结果为:11  
  28.         for(unsigned int i=0; i
  29.         {  
  30.         cout<<”插入遍历:”<
  31.         }  
  32.         //结果为:0,1,2,3,0,4,5,6,7,8,9  
  33.         vec.erase(vec.begin()+2);  
  34.         for(unsigned int i=0; i
  35.         {  
  36.         cout<<”擦除遍历:”<
  37.         }  
  38.   //结果为:0,1,3,0,4,5,6,7,8,9  
  39.         vec.erase(vec.begin()+3,vec.begin()+5);  
  40.     
  41.         for(vector<int>::iterator it = vec.begin(); it!=vec.end(); it++)  
  42.         {  
  43.         cout<<”迭代遍历:”<<*it<
  44.         }  
  45.         return 0;  
  46. }  
  47.   
  48.    
  49.   
#include




#include #include using namespace std; int main() { int i=0; vector vec; for(i=0; i<10; i++) { vec.push_back(i);   //10个元素依次进入,结果为10 } for(unsigned int i=0; i::iterator it; for(it = vec.begin(); it!=vec.end(); it++) { cout<<"迭代遍历:"<<*it<::iterator it = vec.begin(); it!=vec.end(); it++)         {         cout<<"迭代遍历:"<<*it<

2:

vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码:

[cpp] view plain copy
print ?
  1. “font-size:18px;”>#include  
  2. #include  
  3. #include  
  4. #include  
  5. using namespace std;  
  6.   
  7. typedef struct rect  
  8. {  
  9.     int id;  
  10.     int length;  
  11.     int width;  
  12.   
  13.   //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。  
  14.   bool operator< (const rect &a)  const  
  15.     {  
  16.         if(id!=a.id)  
  17.             return id
  18.         else  
  19.         {  
  20.             if(length!=a.length)  
  21.                 return length
  22.             else  
  23.                 return width
  24.         }  
  25.     }  
  26. }Rect;  
  27.   
  28. int main()  
  29. {  
  30.     vector vec;  
  31.     Rect rect;  
  32.     rect.id=1;  
  33.     rect.length=2;  
  34.     rect.width=3;  
  35.     vec.push_back(rect);  
  36.     vector::iterator it=vec.begin();  
  37.     cout<<(*it).id<<’ ’<<(*it).length<<‘ ’<<(*it).width<
  38.   
  39. return 0;  
  40.   
  41. }  
#include




#include #include #include using namespace std; typedef struct rect { int id; int length; int width;   //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。   bool operator< (const rect &a) const { if(id!=a.id) return id vec; Rect rect; rect.id=1; rect.length=2; rect.width=3; vec.push_back(rect); vector::iterator it=vec.begin(); cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<

3  算法


(1) 使用reverse将元素翻转:需要头文件#include

     reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,

     一般后一个都不包含.)

(2)使用sort排序:需要头文件#include

sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

可以通过重写排序比较函数按照降序比较,如下:

定义排序比较函数:

bool Comp(const int &a,const int &b)
{
    return a>b;
}
调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。




vector : C++ STL中的顺序容器,封装数组

 

1. vector容器的内存自增长 

与其他容器不同,其内存空间只会增长,不会减小。先来看看”C++ Primer”中怎么说:为了支持快速的随机访

问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,

为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对

vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储

区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。

关于vector的内存空间,有两个函数需要注意:size()成员指当前拥有的元素个数;capacity()成员指当前(容器必须分

配新存储空间之前)可以存储的元素个数。reserve()成员可以用来控制容器的预留空间。vector另外一个特性在于它的

内存空间会自增长,每当vector容器不得不分配新的存储空间时,会以加倍当前容量的分配策略实现重新分配。例如,

当前capacity为50,当添加第51个元素时,预留空间不够用了,vector容器会重新分配大小为100的内存空间,作为新

连续存储的位置。


[cpp] view plain copy
print ?
  1. “font-size:18px;”>#include   
  2. using namespace std;  
  3. #include   
  4.   
  5. int main()  
  6. {  
  7.         vector<int> arry;  
  8.         //arry.reserve(10);  
  9.         cout << arry.capacity() <
  10.         arry.push_back(1);  
  11.         cout<
  12.         arry.push_back(2);  
  13.         cout<
  14.         arry.push_back(3);  
  15.         cout<
  16.   
  17. }  
  18.   
#include 
using namespace std;




#include int main() { vector arry; //arry.reserve(10); cout << arry.capacity() < 运行结果:

当我们将上面的那句注释去掉之后:



2. vector内存释放

由于vector的内存占用空间只增不减,比如你首先分配了10,000个字节,然后erase掉后面9,999个,留下一个有效元素,但是内存占

用仍为10,000个。所有内存空间是在vector析构时候才能被系统回收。empty()用来检测容器是否为空的,clear()可以清空所有元素。

但是即使clear(),vector所占用的内存空间依然如故,无法保证内存的回收。

如果需要空间动态缩小,可以考虑使用deque。如果非vector不可,可以用swap()来帮助你释放内存。具体方法如下:

[cpp] view plain copy
print ?
  1. “font-size:18px;”>vector<int> nums;   
  2. nums.push_back(1);  
  3. nums.push_back(1);  
  4. nums.push_back(2);  
  5. nums.push_back(2);   
  6. vector<int>().swap(nums); //或者nums.swap(vector ())  
vector nums; 
nums.push_back(1);
nums.push_back(1);
nums.push_back(2);
nums.push_back(2); 
vector().swap(nums); //或者nums.swap(vector ())

或者如下所示,使用一对大括号,意思一样的:
[cpp] view plain copy
print ?
  1. “font-size:18px;”>//加一对大括号是可以让tmp退出{}的时候自动析构  
  2. {   
  3.     std::vector<int> tmp =   nums;    
  4.     nums.swap(tmp);   
  5. }  
  6.   
  7.   
//加一对大括号是可以让tmp退出{}的时候自动析构
{ 
    std::vector tmp =   nums;  
    nums.swap(tmp); 
}


 swap()是交换函数,使vector离开其自身的作用域,从而强制释放vector所占的内存空间,总而言之,释放vector内存最简单的方法是vector.swap(nums)。当时如果nums是一个类的成员,不能把vector.swap(nums)写进类的析构函数中,否则会导致double free or corruption (fasttop)的错误,原因可能是重复释放内存。标准解决方法如下:
[cpp] view plain copy
print ?
  1. “font-size:18px;”>template < class T >  
  2. void ClearVector( vector< T >& vt )   
  3. {  
  4.     vector< T > vtTemp;   
  5.     veTemp.swap( vt );  
  6. }  
template < class T >
void ClearVector( vector< T >& vt ) 
{
    vector< T > vtTemp; 
    veTemp.swap( vt );
}

3. 利用vector释放指针

如果vector中存放的是指针,那么当vector销毁时,这些指针指向的对象不会被销毁,那么内存就不会被释放。如下面这种情况,vector中的元素时由new操作动态申请出来的对象指针:

[cpp] view plain copy
print ?
  1. “font-size:18px;”>#include    
  2. using namespace std;   
  3.   
  4. vector<void *> v;  
#include  
using namespace std; 

vector v;

每次new之后调用v.push_back()该指针,在程序退出或者根据需要,用以下代码进行内存的释放:
[cpp] view plain copy
print ?
  1. “font-size:18px;”>for (vector<void *>::iterator it = v.begin(); it != v.end(); it ++)   
  2.     if (NULL != *it)   
  3.     {  
  4.         delete *it;   
  5.         *it = NULL;  
  6.     }  
  7. v.clear();  
for (vector::iterator it = v.begin(); it != v.end(); it ++) 
    if (NULL != *it) 
    {
        delete *it; 
        *it = NULL;
    }
v.clear();





3,

vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问,和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间,

vector的优点:

1.       可以使用下标访问个别的元素

2.       迭代器可以按照不同的方式遍历容器

3.       可以在容器的末尾增加或删除元素

和数组相比,虽然容器在自动处理容量的大小时会消耗更多的内存,但是容器能提供和数组一样的性能,而且能很好的调整存储空间大小

和其他标准的顺序容器相比(deques or lists),能更有效访问容器内的元素和在末尾添加和删除元素,在其他位置添加和删除元素,vector则不及其他顺序容器,在迭代器和引用也不比lists支持的好

容器的大小和容器的容量是有区别的,大小是指元素的个数,容量是分配的内存大小,容量一般等于或大于容器的大小,vector::size()返回容器的大小,vector::capacity()返回容量值,容量多于容器大小的部分用于以防容器的增加使用,每次重新分配内存都会很影响程序的性能,所以一般分配的容量大于容器的大小,若要自己指定分配的容量的大小,则可以使用vector::reserve(),但是规定的值要大于size()值,


1.构造和复制构造函数

explicit vector ( const Allocator& = Allocator() );

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );

template

vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );

vector ( const vector& x );

 

explicit:是防止隐式转换, Allocator是一种内存分配模式,一般是使用默认的

 

vector A;  //创建一个空的的容器

vector B(10,100); //创建一个个元素,每个元素值为

vector C(B.begin(),B.end()); //使用迭代器,可以取部分元素创建一个新的容器

vector D(C); //复制构造函数,创建一个完全一样的容器

 

2.析构函数

 ~vector()

销毁容器对象并回收了所有分配的内存

 

3.重载了=符号

vector E;

E = B; //使用=符号

B = vector(); //将B置为空容器

 

 

4. vector::begin()  返回第一个元素的迭代器

  函数原型:

  iterator begin ();  //返回一个可变迭代器

const_iterator begin () const; //返回一个常量的迭代器,不可变

 

5.vector::end()  返回的是越界后的第一个位置,也就是最后一个元素的下一个位置

  iterator end ();

const_iterator end () const;

 

6.vector::rbegin() 反序的第一个元素,也就是正序最后一个元素

  reverse_iterator rbegin();

const_reverse_iterator rbegin() const;

 

7.vector::rend() 反序的最后一个元素下一个位置,也相当于正序的第一个元素前一个位置

  reverse_iterator rend();

const_reverse_iterator rend() const;

和vector::end()原理一样

 

8.vector::size() 返回容器中元素个数

  size_type size() const;

  注意与vector::capacity()的区别

 

9.vector::max_size()

  size_type max_size () const;

  返回容器的最大可以存储的元素个数,这是个极限,当容器扩展到这个最大值时就不能再自动增大

 

10. vector::resize()

  void resize ( size_type sz, T c = T() );

  重新分配容器的元素个数,这个还可以改容器的容量,如果重新分配的元素个数比原来的小,将截断序列,后面的部分丢弃,如果大于原来的个数,后面的值是c的值,默认为0

 

11. vector::capacity()

   size_type capacity () const;

   返回vector的实际存储空间的大小,这个一般大于或等于vector元素个数,注意与size()函数的区别

 

12. vector::empty()

   bool empty () const;

   当元素个数为0时返回true,否则为false,根据的是元素个数而不是容器的存储空间的大小

 

 

13. vector::reserve()

   void reserve ( size_type n );

重新分配空间的大小,不过这个n值要比原来的capacity()返回的值大,不然存储空间保持不变,n值要比原来的实际存储空间大才能重新分配空间,但是最大值不可以大于max_size的值,否则会抛出异常

 

14. vector::operator[]  //重载了[]符号

   reference  operator[] ( size_type n );

const_reference  operator[] ( size_type n ) const;

实现了下标访问元素

 

15. vector::at()

   const_reference at ( size_type n ) const;

   reference at ( size_type n );

   在函数的操作方面和下标访问元素一样,不同的是当这个函数越界时会抛出一个异常out_of_range

 

16. vector::front()

   reference front ( );

const_reference front ( ) const;

返回第一个元素的值,与begin()函数有区别,begin()函数返回的是第一个元素的迭代器

 

17. vector::back()

   reference back ( );

const_reference back ( ) const;

同样,返回最后一个元素的值,注意与end()函数的区别

 

18. vector::assign()

   template void assign ( InputIterator first, InputIterator last );

void assign ( size_type n, const T& u );

将丢弃原来的元素然后重新分配元素,第一个函数是使用迭代器,第二个函数是使用n个元素,每个元素的值为u。

 

19. vector::push_back()

   void push_back ( const T& x );

   在容器的最后一个位置插入元素x,如果size值大于capacity值,则将重新分配空间

 

20. vector::pop_back()

   void pop_back ( );

   删除最后一个元素

 

 

21. vector::insert()

   iterator insert ( iterator position, const T& x );

   void insert ( iterator position, size_type n, const T& x );

template

void insert ( iterator position, InputIterator first, InputIterator last );

   插入新的元素,

第一个函数,在迭代器指定的位置前插入值为x的元素

第二个函数,在迭代器指定的位置前插入n个值为x的元素

第三个函数,在迭代器指定的位置前插入另外一个容器的一段序列迭代器first到last

若插入新的元素后总得元素个数大于capacity,则重新分配空间

 

22. vector::erase()

   iterator erase ( iterator position );

iterator erase ( iterator first, iterator last );

删除元素或一段序列

 

23. vector::swap()

   void swap ( vector& vec );

   交换这两个容器的内容,这涉及到存储空间的重新分配

 

24. vector::clear()

   void clear ( );

   将容器里的内容清空,size值为0,但是存储空间没有改变


[cpp] view plain copy
print ?
  1. “font-size:18px;”>#include   
  2. #include   
  3. using namespace std;  
  4.   
  5. int _tmain(int argc, _TCHAR* argv[])  
  6. {  
  7.   
  8.         //构造函数,复制构造函数(元素类型要一致),  
  9.     vector<int> A;  //创建一个空的的容器  
  10.     vector<int> B(10,100); //创建一个10个元素,每个元素值为100  
  11.     vector<int> C(B.begin(),B.end()); //使用迭代器,可以取部分元素创建一个新的容器  
  12.     vector<int> D(C); //复制构造函数,创建一个完全一样的容器  
  13.       
  14.           //重载=  
  15.     vector<int> E;  
  16.     E = B;  
  17.    
  18.     //vector::begin(),返回的是迭代器  
  19.      
  20.     vector<int> F(10); //创建一个有10个元素的容器  
  21.            for (int i = 0; i < 10; i++)  
  22.           {  
  23.         F[i] = i;  
  24.           }  
  25.   
  26.     /* 
  27.     vector F; //创建一个空容器 
  28.     for (int i = 0; i < 10; i++) 
  29.     { 
  30.         F.push_back(i); 
  31.     }  
  32.         */  
  33.   
  34.     vector<int>::iterator BeginIter = F.begin();  
  35.     cout << *BeginIter << endl; //输出0  
  36.   
  37.     //vector::end() 返回迭代器  
  38.     vector<int>::iterator EndIter = F.end();  
  39.     EndIter–; //向后移一个位置  
  40.     cout << *EndIter << endl; //输出9  
  41.    
  42.     //vector::rbegin() 返回倒序的第一个元素,相当于最后一个元素  
  43.     vector<int>::reverse_iterator ReverBeIter = F.rbegin();  
  44.     cout << *ReverBeIter << endl; //输出9  
  45.   
  46.     //vector::rend() 反序的最后一个元素下一个位置,也相当于正序的第一个元素前一个位置  
  47.     vector<int>::reverse_iterator ReverEnIter = F.rend();  
  48.     ReverEnIter–;  
  49.     cout << *ReverEnIter << endl; //输出0  
  50.   
  51.     //vector::size() 返回元素的个数  
  52.     cout << F.size() << endl; //输出10  
  53.   
  54.     //vector::max_size()  
  55.     cout << F.max_size() << endl; //输出1073741823,这个是极限元素个数  
  56.   
  57.     //vector::resize()  
  58.     cout << F.size() << endl; //输出10  
  59.     F.resize(5);  
  60.     for(int k = 0; k < F.size(); k++)  
  61.         cout << F[k] << ”  ”//输出 0 1 2 3 4  
  62.          cout << endl;  
  63.       
  64.     //vector::capacity()  
  65.     cout << F.size() << endl; //5  
  66.     cout << F.capacity() << endl; //10  
  67.   
  68.     //vector::empty()  
  69.          B.resize(0);  
  70.     cout << B.size() << endl; //0  
  71.     cout << B.capacity() << endl; //10  
  72.     cout << B.empty() << endl; //true  
  73.   
  74.     //vector::reserve() //重新分配存储空间大小  
  75.            cout << C.capacity() << endl; //10  
  76.     C.reserve(4);  
  77.     cout << C.capacity() << endl; //10  
  78.     C.reserve(14);  
  79.     cout << C.capacity() << endl; //14  
  80.   
  81.     //vector::operator []  
  82.     cout << F[0] << endl; //第一个元素是0  
  83.   
  84.     //vector::at()  
  85.     try  
  86.     {  
  87.       cout << ”F.size = ” << F.size() << endl; //5  
  88.            cout << F.at(6) << endl; //抛出异常  
  89.     }  
  90.     catch(out_of_range)  
  91.     {      
  92.        cout << ”at()访问越界” << endl;  
  93.     }  
  94.   
  95.     //vector::front() 返回第一个元素的值  
  96.            cout << F.front() << endl; //0  
  97.   
  98.     //vector::back()  
  99.     cout << F.back() << endl; //4  
  100.   
  101.     //vector::assign()  
  102.     cout << A.size() << endl; //0  
  103.     vector<int>::iterator First = C.begin();  
  104.     vector<int>::iterator End = C.end()-2;  
  105.     A.assign(First,End);  
  106.     cout << A.size() << endl; //8  
  107.     cout << A.capacity() << endl; //8  
  108.   
  109.     A.assign(5,3); //将丢弃原来的所有元素然后重新赋值  
  110.     cout << A.size() << endl; //5  
  111.     cout << A.capacity() << endl; //8  
  112.   
  113.     //vector::push_back()  
  114.     cout << *(F.end()-1) << endl; //4  
  115.     F.push_back(100);  
  116.     cout << *(F.end()-1) << endl; //100  
  117.   
  118.     //vector::pop_back()  
  119.     cout << *(F.end()-1) << endl; //100  
  120.     F.pop_back();  
  121.     cout << *(F.end()-1) << endl; //4  
  122.   
  123.     //vector::swap()  
  124.     F.swap(D); //交换这两个容器的内容  
  125.     for(int f = 0; f < F.size(); f++)  
  126.         cout << F[f] << ” ”;  
  127.     cout << endl;  
  128.     for (int d = 0; d < D.size(); d++)  
  129.         cout << D[d] << ” ”;  
  130.          cout << endl;  
  131.     //vector::clear()  
  132.     F.clear();  
  133.     cout << F.size() << endl;     //0  
  134.     cout << F.capacity() << endl; //10  
  135.   
  136.     return 0;  
  137. }  
  138.   
  139.   
  140.   
#include 




#include using namespace std; int _tmain(int argc, _TCHAR* argv[]) {         //构造函数,复制构造函数(元素类型要一致),     vector A;  //创建一个空的的容器     vector B(10,100); //创建一个10个元素,每个元素值为100     vector C(B.begin(),B.end()); //使用迭代器,可以取部分元素创建一个新的容器     vector D(C); //复制构造函数,创建一个完全一样的容器                //重载=     vector E;     E = B;       //vector::begin(),返回的是迭代器         vector F(10); //创建一个有10个元素的容器            for (int i = 0; i < 10; i++)           {         F[i] = i;           }     /*     vector F; //创建一个空容器     for (int i = 0; i < 10; i++)     {         F.push_back(i);     }         */     vector::iterator BeginIter = F.begin();     cout << *BeginIter << endl; //输出0     //vector::end() 返回迭代器     vector::iterator EndIter = F.end();     EndIter--; //向后移一个位置     cout << *EndIter << endl; //输出9       //vector::rbegin() 返回倒序的第一个元素,相当于最后一个元素     vector::reverse_iterator ReverBeIter = F.rbegin();     cout << *ReverBeIter << endl; //输出9     //vector::rend() 反序的最后一个元素下一个位置,也相当于正序的第一个元素前一个位置     vector::reverse_iterator ReverEnIter = F.rend();     ReverEnIter--;     cout << *ReverEnIter << endl; //输出0     //vector::size() 返回元素的个数     cout << F.size() << endl; //输出10     //vector::max_size()     cout << F.max_size() << endl; //输出1073741823,这个是极限元素个数     //vector::resize()     cout << F.size() << endl; //输出10     F.resize(5);     for(int k = 0; k < F.size(); k++)         cout << F[k] << "  "; //输出 0 1 2 3 4          cout << endl;          //vector::capacity()     cout << F.size() << endl; //5     cout << F.capacity() << endl; //10     //vector::empty()          B.resize(0);     cout << B.size() << endl; //0     cout << B.capacity() << endl; //10     cout << B.empty() << endl; //true     //vector::reserve() //重新分配存储空间大小            cout << C.capacity() << endl; //10     C.reserve(4);     cout << C.capacity() << endl; //10     C.reserve(14);     cout << C.capacity() << endl; //14     //vector::operator []     cout << F[0] << endl; //第一个元素是0     //vector::at()     try     {       cout << "F.size = " << F.size() << endl; //5            cout << F.at(6) << endl; //抛出异常     }     catch(out_of_range)     {            cout << "at()访问越界" << endl;     }     //vector::front() 返回第一个元素的值            cout << F.front() << endl; //0     //vector::back()     cout << F.back() << endl; //4     //vector::assign()     cout << A.size() << endl; //0     vector::iterator First = C.begin();     vector::iterator End = C.end()-2;     A.assign(First,End);     cout << A.size() << endl; //8     cout << A.capacity() << endl; //8     A.assign(5,3); //将丢弃原来的所有元素然后重新赋值     cout << A.size() << endl; //5     cout << A.capacity() << endl; //8     //vector::push_back()     cout << *(F.end()-1) << endl; //4     F.push_back(100);     cout << *(F.end()-1) << endl; //100     //vector::pop_back()     cout << *(F.end()-1) << endl; //100     F.pop_back();     cout << *(F.end()-1) << endl; //4     //vector::swap()     F.swap(D); //交换这两个容器的内容     for(int f = 0; f < F.size(); f++)         cout << F[f] << " ";     cout << endl;     for (int d = 0; d < D.size(); d++)         cout << D[d] << " ";          cout << endl;     //vector::clear()     F.clear();     cout << F.size() << endl;     //0     cout << F.capacity() << endl; //10     return 0; }


本文借鉴与:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html

                     http://blog.csdn.net/bizhu12/article/details/6769976

      http://www.cnblogs.com/summerRQ/articles/2407974.html

个人分类: c++/c 面试
(".MathJax").remove();


 
    MathJax.Hub.Config({ 
            "HTML-CSS": { 
                    linebreaks: { automatic: true, width: "94%container" },
                    imageFont: null
            },
            tex2jax: {
                preview: "none"
            },
            mml2jax: {
                preview: 'none'
            }
    });


    (function(){
        var btnReadmore =
(".MathJax").remove();     MathJax.Hub.Config({             "HTML-CSS": {                     linebreaks: { automatic: true, width: "94%container" },                    imageFont: null            },            tex2jax: {                preview: "none"            },            mml2jax: {                preview: 'none'            }    });    (function(){        var btnReadmore =
("#btn-readmore"); if(btnReadmore.length>0){ var winH = (window).height();vararticleBox= ( w i n d o w ) . h e i g h t ( ) ; v a r a r t i c l e B o x = ("div.article_content"); var artH = articleBox.height(); if(artH > winH*2){ articleBox.css({ 'height':winH*2+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } })()
scrolling="no" allowfullscreen="true" src="https://edu.csdn.net/topic/detail/python1?v=new&from=https://blog.csdn.net/msdnwolaile/article/details/52708144" height="162px" width="100%">
想对作者说点什么? 我来说一句

c++ vector各种函数介绍及其用法

构造函数 语法: C++ Vectors可以使用以下任意一种参数方式构造: vector();    //无参数 - 构造一个空的vector vector( size_typ…

clx55555 clx55555

2016-08-29 17:36:21

阅读数:958

vector 常用函数

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存…

wuan584974722 wuan584974722

2016-01-23 16:26:55

阅读数:1518

c++ vector各种函数介绍及其用法 - CSDN博客

构造函数 语法: C++ Vectors可以使用以下任意一种参数方式构造: vector();    //无参数 - 构造一个空的vector vector( size_type num, const TYPE &…

2018-4-11

vector 常用函数 - CSDN博客

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一…

2018-5-2

青岛90后小伙在家无聊玩微信,存款惊 呆父母 威能科技 · 顶新

C++容器vector的常用成员函数

vector容器是笔试时最经常用到的容器,它实际是一个类模板,它所具有一些成员函数我们必须熟练使用,这样才会加快编程速度。 首先加头文件并定义:   #include vectorvec; 1…

skyinmoon skyinmoon

2017-06-11 14:38:52

阅读数:1062

STL之Vector(二):Vector常用函数 - CSDN博客

向vector添加若干个数据     vector添加数据的缺省方法是push_back()。push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。例如:向vector

2018-4-26

c++ vector的成员函数解析 - CSDN博客

vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)…

2018-4-14

STL vector用法介绍+ STL 常用函数用法

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。…

hhu1506010220 hhu1506010220

2016-07-20 20:23:44

阅读数:998

vector 常用函数方法 查了半天 总结一下

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存…

xs574924427 xs574924427

2012-03-13 10:59:23

阅读数:10423

vector 作为参数和返回值 - CSDN博客

C++ ——vector作为函数返回值用法 在实际应用过程中,我们经常需要保存一系列的数据,有可能是一个值,点等,这时我们会用到vector。 如下所示: vector<in…

2018-4-29

关于Vector作为函数的返回值 - CSDN博客

关于Vector作为函数的返回值,有几点需要说明:    1.首先如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为在Vector超出作用域的,会自动…

2018-3-24

c++ STL中的全排列函数

头文件:

#include 函数原型: bool next_permutation(iterator start, iterator end); next_permutation函数的返回值是布尔…

xiaoquantouer xiaoquantouer

2016-12-05 23:11:03

阅读数:1488

var new_element = document.createElement("script");  new_element.setAttribute("async", "async");  new_element.setAttribute("charset", "utf-8");  new_element.setAttribute("data-notify", "inforFlowMulti_notify"); new_element.setAttribute("src", "https://shared.ydstatic.com/js/yatdk/3.0.0/stream.js"); new_element.setAttribute("data-id", "8935aa488dd58452b9e5ee3b44f1212f"); new_element.setAttribute("data-insert-nodes", "yd_a_d_feed_0"); new_element.setAttribute("data-pos", "inline"); new_element.setAttribute("data-img-Style", "float:right;width:120px;"); new_element.setAttribute("data-des-Style", "color: #8e959a;line-height: 24px;font-size:14px;font-family: 'PingFang SC', 'Microsoft YaHei', SimHei, Arial, SimSun;"); new_element.setAttribute("data-tit-Style", "font-size:20px;font-weight:bold;margin-bottom:10px;font-family: 'PingFang SC', 'Microsoft YaHei', SimHei, Arial, SimSun;"); new_element.setAttribute("data-div-Style", "background-image: url(//img-ads.csdn.net/2016/201608021757063065.png);background-repeat: no-repeat;background-position: bottom left;"); document.body.appendChild(new_element); scrolling="no">

STL vector用法介绍+ STL 常用函数用法 - CSDN博客

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数函数指针在迭代算法中使用,如在remove_if()和for_each…

2018-4-18

vector的所有函数和使用的注意事项 - CSDN博客

1、构造函数:       (1)vector        (2)vector        (3)vector        (4)vector

2018-4-9

C++ 中如何用 vector类作为函数的参数

今天学些了C++中的vector容器,如何让vector作为参数呢?贴出我的代码: #include //vector 是C++中最常用的容器类

#include using namespa…

doctormacky doctormacky

2010-12-10 16:41:00

阅读数:39199

C++(笔记)容器(vector)作为函数参数如何传参

一、大致以下类型 void 函数名( vector< int> obj ); void 函数名( vector< int>* pobj ); void 函数名( const ve…

w_linux w_linux

2017-05-17 17:51:54

阅读数:8288

vector 常用函数方法 查了半天 总结一下 - CSDN博客

vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一…

2018-3-25

undefined

STL之Vector(二):Vector常用函数

STL之Vector(二):Vector常用函数

ac_hexin ac_hexin

2016-07-25 17:28:22

阅读数:2002

C++ 中vector的使用方法

C++ 中vector的使用方法(纯干货!)

duan19920101 duan19920101

2016-02-01 10:21:20

阅读数:110331

c++中vector使用详解

一直不用库,最近开始用感觉很爽,写一点心得记录一下。最基础的库大概就是vector了吧,先从这个开始。 用法: 声明头文件:#include构造vector加入元素遍历等等删除 声明头文件是如果…

aak1247 aak1247

2016-08-26 00:23:03

阅读数:3614

C++中vector容器的基本用法总结

在C++中,vector是一个十分有用的容器,下面根据多篇文章对这个vector做一下总结。1.文件包含首先在程序开头处加上#include以包含所需要的类文件vector,还有一定要加上using …

ws_20100 ws_20100

2016-03-08 18:04:35

阅读数:9644

c++ 中对vector的使用方法

vector: 从数组最后压入操作:s.push_back(a) 从数组最后删除操作:s.pop_back(a) stack: 从数组最后压入操作:s.push_back(a) 从数组最后删除操作:…

crisy1991 crisy1991

2016-06-01 10:15:51

阅读数:3613

C/C++——vector的基本操作总结

标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结: vector对象的定义和初始化 ve…

google19890102 google19890102

2016-06-17 16:45:29

阅读数:12729

scrolling="no">

c++中vector的用法详解

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.      用法:…

hancunai0017 hancunai0017

2011-12-01 21:25:06

阅读数:397056

C++中的vector使用范例

前几天一个同学问我c++里面的vector的使用,我研究了一下,先总结如下:1.vector 的数据的存入和输出:#include#include#include using namespace st…

tjh666 tjh666

2007-05-11 10:18:00

阅读数:65206

C++中vector的用法解析

本文实例展示了C++中的vector用法,分享给大家供大家参考。具体如下: 一、概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。ve…

liuweiyuxiang liuweiyuxiang

2016-10-04 21:51:07

阅读数:3014

c++ std vector用法介绍

c++ vector 一部分内容来自:http://blog.csdn.net/phoebin/article/details/3864590;http://www.cnblogs.com/wang…

yueguanyun yueguanyun

2016-07-05 17:24:34

阅读数:9407

vector 详细用法 C++

使用STL的三个境界:能用,明理,能扩展。本文属于第一个境界,如果结合了《STL源码解析》,则达到了第二个境界, 如果项目中有需要,对STL进行了扩展则就达到了第三个境界! 如果希望深刻理解vecto…

sangyongjia sangyongjia

2016-04-11 20:54:48

阅读数:13343

C++ vector的使用方法

C++ vector的使用方法和例子

tengfei461807914 tengfei461807914

2016-08-11 23:01:15

阅读数:2510

剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)

整数中1出现的次数(从1到n整数中1出现的次数) 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、1…

huzhigenlaohu huzhigenlaohu

2016-06-28 22:34:28

阅读数:3992

c++ vector用法

转载地址:http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html 在c++中,vector是一个十分有用的容器,下面对这个容…

zzuchengming zzuchengming

2016-02-29 20:32:12

阅读数:822

c++ vector使用 最全整理

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: …

weierqiuba weierqiuba

2017-03-25 13:03:44

阅读数:1057

C/C++中容器vector使用方法<第一弹>

C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector!vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负…

u013171165 u013171165

2014-06-22 17:26:23

阅读数:4347

scrolling="no">

使用new和vector实现一维和二维数组

new vector 一维和二维数组

duan19920101 duan19920101

2016-03-27 15:17:28

阅读数:2748

如何delete vector中new出来的内存

delete vector内存

gcq1992 gcq1992

2017-04-13 16:13:12

阅读数:1257

C++Vector的使用误区

初始化vector并传引用到DLL中,DLL中为该引用添加节点,vector内存释放时会报堆栈错误,原因? 这个问题其实挺好避免的,说白了就是不要一个模块new,另一个模块delete,不要…

Nancy_m Nancy_m

2013-06-05 10:30:57

阅读数:4971

vector的所有函数和使用的注意事项

1、构造函数:        (1)vector        (2)vector        (3)vector        (4)vector        (5)vector  …

u010585135 u010585135

2015-04-11 14:16:42

阅读数:3621

C++基础篇 – vector的resize函数和reserve函数

对于C++的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vector的size()和capacity()方法获得该vector当前的size和capacity值。相…

VampirEM_Chosen_One VampirEM_Chosen_One

2016-01-14 19:39:15

阅读数:4714

【STL】vector常用函数的例子

// erase功能:移除vector中部分的元素 void test_vector_erase() { int t[7] = {10, 11, 12, 13, 14, 15, 16}; st…

huang_xw huang_xw

2012-11-24 20:58:04

阅读数:3038

C++——获取array,vector,string的元素个数

array: sizeof(array) / sizeof(array[0]) 如果为字符串的字符数组则为 sizeof(array) / sizeof(array[0])…

sinat_36053757 sinat_36053757

2017-03-26 16:33:09

阅读数:3218

关于vector大小(size)和容量(capacity)总结

主要介绍了vector 容器大小相关的操作函数(size、max_szie、capacity),同时介绍了容器大小超出容器capacity能力会内存重新分配以及iterator失效简单分析。同时给出了…

xiao3404 xiao3404

2016-04-08 22:37:03

阅读数:22991

C++ vector拷贝使用总结

虽是细节,但使用不当,也容易造成严重错误。挖过填过的坑,记录一下。 主要有以下几种方法 vector list; list.push_back(1); list.push_back(2); 一、初始…

hust_bochu_xuchao

2017-06-03 11:11:51

阅读数:12189

使用copy函数输出vector中的内容

学习了一种快速输出vector到输出流的方法(当然这个输出流不仅仅是标准输出cout,还可以是其他的文件流)。 首先要包含两个头文件,(这个头文件中有copy函数)以及(这个里面有ostream_i…

cjbct cjbct

2017-01-08 20:28:47

阅读数:1403

scrolling="no">

c++的vector赋值方法汇总 及正确释放vector的内存

vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用…

u014546553 u014546553

2016-12-14 16:47:13

阅读数:8098

【C++ vector拷贝的一些方法】

小记一下: 一、初始化构造   vector v1(v2); 二、swap赋值     vector v1();  v1.swap(v2);         // v1 = v2 三、assig…

u013575812 u013575812

2016-01-02 19:58:01

阅读数:11399

vector 、 copy()

#include

#include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) {  d…

guotong1988 guotong1988

2012-02-10 10:49:12

阅读数:2930

vector与数组间数据copy处理

#algostuff.h/* PRINT_ELEMENTS() * - prints optional C-string optcstr followed by * - all elements of…

rufeng18 rufeng18

2009-01-14 13:52:00

阅读数:2408

C++vector的使用总结及常用vector操作

C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件:

#include C++ vector类有两种使…

fanyun_01 fanyun_01

2017-02-26 21:11:48

阅读数:11352

C++Vector用法

C++Vector用法   C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板…

zanfeng zanfeng

2013-11-25 09:14:34

阅读数:18769

C++ Vector 简单实现 会用也要会写

我们知道,内存块的大小是不能改变的,因此数组的大小不能改变。但是STL的vector让我们摆脱了这种困扰,它可以帮我们动态的管理数组的大小。 诚然,STL的vector底层还是通过动态数组来实现的,当…

u011408355 u011408355

2015-08-24 21:17:03

阅读数:2417

C++之vector中元素的N种遍历

随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。…

fightingform fightingform

2016-09-23 21:13:55

阅读数:3910

C++ vector排序

在使用vector对于可变长度数据存储时,不可避免的会遇到对数据的排序 对于系统类型,比如int,可以使用系统提供的升序降序函数进行操作 vector< int >升降序int a[10]={5…

upc_xbt upc_xbt

2016-11-23 15:31:02

阅读数:1241

C++ vector 实现二维数组

简介 在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组。本文主要是关于使用Vector初始化、遍历方面的内容。其他二维的思想也是类似的。 1.初始化 (…

a819825294 a819825294

2016-08-01 20:25:04

阅读数:20724

scrolling="no">

c ++ vector

Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型…

lsn946803746 lsn946803746

2016-08-10 17:21:11

阅读数:3666

c++中vector向量几种情况的总结(向量指针,指针的向量)

1.标准库vector类型 vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。标准库将负责管理与存储元素相关的内存。我们把 vector 称为容器,是因为它可以包含其他对象。…

s9434 s9434

2016-04-03 21:35:46

阅读数:32937

C++之vector容器初学(二)——插入和删除

插入操作: 理论知识 ² vector.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据的位置。 ² vector.insert(pos,n,ele…

sum_TW sum_TW

2017-02-06 11:30:26

阅读数:16857

c++的vector赋值方法汇总

#include

#include using namespace std; void main() { vectorivec1(10,42); //内置方…

zhuwj06 zhuwj06

2011-02-26 16:09:00

阅读数:56643

C++中巧得数组长度和vector的理解

c++中string可以通过string.length()来获得string的长度,当对与一个数组来说就不是这么容易了。如一个int型的数组:int a[] = {1,2,3,5,6,9};如何获得呢…

Leeboy_Wang Leeboy_Wang

2011-01-13 10:27:00

阅读数:21647

c++顺序容器vector用法

原创作品转载请注明出处http://blog.csdn.net/always2015/article/details/44976729顺序容器概述一个容器就是一些特定类型的集合。顺序容器为程序员提供了…

Always2015 Always2015

2015-04-10 11:04:42

阅读数:2524

没有更多推荐了,返回首页

你可能感兴趣的:(c++/c,面试)