66)vector基础总结
基本知识:
1)vector 样子 其实就是一个动态数组:
2)vector的基本操作:
3)vector对象的默认构造
对于类 添加到 容器中 要有 拷贝构造函数---》 这个注意
------(1) 利用 v1.size() 来求容器中元素的个数
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 void hanshu() 5 { 6 vector<int> v1; 7 v1.push_back(2); 8 v1.push_back(3); 9 v1.push_back(4); 10 //这个 size() 就是在求容器的长度 11 cout<<v1.size()<<endl; 12 // 13 } 14 int main() 15 { 16 hanshu(); 17 return 0; 18 }
---------(2)求这个动态数组的最后一个元素和 第一个元素
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 void hanshu() 5 { 6 vector<int> v1; 7 v1.push_back(2); 8 v1.push_back(3); 9 v1.push_back(4); 10 11 //求解第一个元素值 12 cout<<v1.front()<<endl; 13 //求解最后一个元素的值 14 cout<<v1.back()<<endl; 15 16 } 17 int main() 18 { 19 hanshu(); 20 return 0; 21 }
---------(3)修改容器的头部信息
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 void hanshu() 5 { 6 vector<int> v1; 7 v1.push_back(2); 8 v1.push_back(3); 9 v1.push_back(4); 10 //函数返回值作为左值成立,那么是返回一个引用 11 //修改第一个元素值 12 v1.front()=11; 13 14 } 15 int main() 16 { 17 hanshu(); 18 return 0; 19 }
----------------------(4)vector赋值
---------------(5)vector末尾添加或移除数据
--------------(6)存取vector数据
---(7)vector中的拷贝构造函数,如果没有自己定义 那么就是 浅拷贝,浅拷贝,浅拷贝,浅拷贝,浅拷贝----
主要是由于push_back函数引起的。这个函数会对传递进来的参数进行一次拷贝(调用拷贝构造函数),并将其添加到vector中。如果对象没有拷贝构造函数,编译器会为其生成一个,但是这个编译器生成的拷贝构造函数只是进行了一次浅拷贝,在本例中就是只是复制了str的值,也就是"strend micro"的地址,即拷贝后的对象和原对象的str都是指向同一块内存区域,但是这个拷贝的对象和原对象的析构函数又都会执行,这里就会delete两次。(注意,即使对于一个空类,编译器也会默认生成4个成员函数:默认构造函数,析构函数,拷贝构造函数,赋值函数。)
-------------------(8)迭代器的基本原理
----------(9)vector的数据删除
1 理论知识 2 vector.clear(); //移除容器的所有数据 3 vec.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。 4 vec.erase(pos); //删除pos位置的数据,返回下一个数据的位置。 5 简单案例: 6 删除区间内的元素 7 vecInt是用vector<int>声明的容器,现已包含按顺序的1,3,5,6,9元素。 8 vector<int>::iterator itBegin=vecInt.begin()+1; 9 vector<int>::iterator itEnd=vecInt.begin()+2; 10 vecInt.erase(itBegin,itEnd); 11 //此时容器vecInt包含按顺序的1,6,9三个元素。 12 13 假设 vecInt 包含1,3,2,3,3,3,4,3,5,3,删除容器中等于3的元素 14 for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); ) //小括号里不需写 ++it 15 { 16 if(*it == 3) 17 { 18 it = vecInt.erase(it); //以迭代器为参数,删除元素3,并把数据删除后的下一个元素位置返回给迭代器。 19 //此时,不执行 ++it; 20 } 21 else 22 { 23 ++it; 24 } 25 } 26 27 //删除vecInt的所有元素 28 vecInt.clear(); //容器为空