时间:2021-05-02
1 获得容器最后一个元素
------ 使用 back或rbegin 取得
? 1 2 3 4 5 6 7 8 9 // back、rbegin 有常量和引用两种形式 std::vector<int> myVector; myVector.back()=3; std::vector<int>::reverse_iterator tailIter; tailIter=myVector.rbegin(); *tailIter=3 2 删除某元素
需要删除某位置的元素,应使用iterator遍历, 不应使用at(i) 方式遍历,因为删除元素时,是根据iterator位置进行删除的。
删除元素时,返回值为:位于删除的元素之后的第一个的元素所在的位置
输出:
? 1 2 3 v1 = 10 20 30 40 50 v1 = 20 30 40 50 v1 = 20 50 3 两vector 容易赋值时,不能通过=来赋值
而应使用遍历 或assign函数的方式来赋值
错误赋值方式:
? 1 2 // 这是错误的赋值方式 delNode.vectorNode=delPositionVector ;正确赋值方式一: 遍历
? 1 2 3 4 5 for (int i=0;i<delPositionVector.size();i++) { nodeTemp=delPositionVector.at(i); delNode.vectorNode.push_back(nodeTemp); }正确赋值方式二: assign函数
? 1 delNode.vectorNode.assign(delPositionVector.begin(),delPositionVector.end()); 4 在指定的iterator位置 插入容器元素
插入某元素时,返回值为插入的那个元素所在的位置,原先处于此位置的元素将被顺次后移
5 更新容器中的某个元素
办法之一: 先搜索到这个元素位置, 在此位置添加更新的元素,删除原先的元素
或搜索到此元素,删除此元素,在此元素位置上添加新元素
应用例子:
6 push_back或pop某元素后,迭代器会失效 需要重新获得
STL中的vector不是关联性容器,当插入新的元素后,原来取得的迭代器就会失效。
? 1 2 3 4 5 6 7 8 std::vector<int> vNum; vNum.push_back(1); vNum.push_back(3); vNum.push_back(5); std::vector<int>::iterator pIt = vNum.begin(); std::cout << "Before insert a new number: " << *pIt << std::endl; vNum.push_back(7); std::cout << "After insert a new number: " << *pIt << std::endl; // Oh! No!注意最后一句,运行到最后一句时就会发生崩溃,迭代器访问错误。插入元素后,要重新取得迭代器。
而对于map这样的关联性容器,插入新元素后,原来的迭代器仍然会有效。
例子如下:
7 合并两个顺序容器
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 std::vector<line>::iterator i1 = v1.begin(), i2 = v2.begin(); while(i1 != v1.end() && i2 != v2.end()) { if(i1->index == i2->index) { line t = { i1->index, i1->value1, i2->value2 } v3.push_back(t); ++i1; ++i2; } else if(i1->index > i2->index) { i2->value1 = 0; v3.push_back(*i2); ++i2; } else { i1->value2 = 0; v3.push_back(*i1); ++i1; } } while(i1 != v1.end()) v3.push_back(*(i1++)); while(i2 != v2.end()) v3.push_back(*(i2++));9 排序
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 // alg_sort.cpp // compile with: /EHsc #include <vector> #include <algorithm> #include <functional> // For greater<int>( ) #include <iostream> // Return whether first element is greater than the second bool UDgreater ( int elem1, int elem2 ) { return elem1 > elem2; } int main( ) { using namespace std; vector <int> v1; vector <int>::iterator Iter1; int i; for ( i = 0 ; i <= 5 ; i++ ) { v1.push_back( 2 * i ); } int ii; for ( ii = 0 ; ii <= 5 ; ii++ ) { v1.push_back( 2 * ii + 1 ); } cout << "Original vector v1 = ( " ; for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " "; cout << ")" << endl; sort( v1.begin( ), v1.end( ) ); cout << "Sorted vector v1 = ( " ; for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " "; cout << ")" << endl; // To sort in descending order. specify binary predicate sort( v1.begin( ), v1.end( ), greater<int>( ) ); cout << "Resorted (greater) vector v1 = ( " ; for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " "; cout << ")" << endl; // A user-defined (UD) binary predicate can also be used sort( v1.begin( ), v1.end( ), UDgreater ); cout << "Resorted (UDgreater) vector v1 = ( " ; for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ ) cout << *Iter1 << " "; cout << ")" << endl; } ? 1 2 3 4 Original vector v1 = ( 0 2 4 6 8 10 1 3 5 7 9 11 ) Sorted vector v1 = ( 0 1 2 3 4 5 6 7 8 9 10 11 ) Resorted (greater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 ) Resorted (UDgreater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 )10 清空所有元素
? 1 m_itemVector.clear();11 遍历
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) { if(iter->flag==-1) { break; } iter->flag=1; } vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) //先全部取消 { iter->flag=0; }12 删除符合条件的项
? 1 2 3 4 5 6 7 8 9 10 11 12 13 int CurrentCount=(int)m_itemVector.size(); for(int i=0;i<CurrentCount;i++) { if(m_itemVector.at(i).flag==1) { m_itemVector.erase(m_itemVector.begin()+i); DeleteItem(i); this->Invalidate(); CurrentCount--; i--; //删除第i位置后,需要重新判断第i位置是否符合条件,因此需要i--。 } }13 正序遍历 然后反序遍历
? 1 2 3 4 5 6 7 8 9 10 11 12 13 vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) //先全部取消 { iter->flag=0; } for (;i>0;) //从后往前设置 iter 退到Begin() 再减的话 就会出现问题 { iter--; //结束时,正好退到Begin() i--; iter->flag=1; }14 在VECTOR中查找
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include<vector> #include<algorithm> //在VECTOR中查找 using namespace std; vector<int> L; L.push_back( 1 ); L.push_back( 2 ); L.push_back( 3 ); L.push_back( 4 ); L.push_back( 5 ); vector<int>::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3 if ( result == L.end( ) ) //没找到 cout << "No" << endl; else //找到 cout << "Yes" << endl;声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1基本操作(1)头文件#include.(2)创建vector对象,vectorvec;
C++vector中实际删除元素使用的是容器vecrotstd::vector::erase()方法。C++中std::remove()并不删除元素,因为容器的
c++vector用法C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实
本文实例展示了C++中的vector用法,分享给大家供大家参考。具体如下:一、概述vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据
标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,下面通过本文给大家介绍,具体内