std::vector
|
初始化 |
std::vector<int> vec; // 空对象 std::vector<int> vec(5,-1); // 创建了一个包含5个元素且值为-1的vector std::vector<std::string> strVec{"a", "b", "c"}; // 列表初始化 要注意“()”和“{}”这样的初始化情况,比如: std::vector<int> vec(10,1); // 包含10个元素,且值为1 std::vector<int> vec{10,1}; // 包含2个元素,值分别为10,1 |
|
成员访问 |
std::vector<int> vec(10,1); int val = vec[1]; // 下标访问 int val2 = vec.at(1); |
|
赋值 |
for(int i = 0; i < 5; ++i){ vec.push_back(i); } |
|
插入元素 |
std::vector<int> vec(10,1); vec.insert(pos,num); // 在pos位置插入元素num vec.insert(pos,n,num); // 在pos位置插入n个元素num vec.insert(pos.beg,end);// 在pos位置插入区间为[beg,end)的元素 注意: 1.一般insert函数将元素插入到迭代器所指定的位置之前 2. vector insert 效率极低; |
|
删除元素 |
vec.erase(p);// 删除迭代器p所指定的元素,返回一个指向被删除元素之后的迭代器。 vec.erase(begin,end);//删除b,e所指定范围内的元素,返回一个指向最后被删除元素之后的迭代器。 vec.clear();// 删除所有元素 注意,删除元素,会导致迭代器无效: std::vector<int>::iterator iter = vec.begin(); for(; iter != vec.end();){ if(*iter == 0) iter = vec.erase(iter); else iter++; } 删除容器内某一个特定的元素,编写方式可为: std::vector<int>::iterator iter = std::find(vec.begin(),vec.end(),5); if(iter != vec.end()) vec.erase(iter); 删除容器内某一段范围内的元素,编写方式可为: first = std::find(vec.begin(),vec.end(), value1); last = std::find(vec.begin(),vec.end(), value2); if(first != vec.end() && last != vec.end()) // 判断有效性 { vec.erase(first,last); }
删除容器内所有元素,当然可以这样: vec.erase(vec.begin(),vec.end()); 也可以 vec.clear(); |
|
遍历 |
std::vector<int>::iterator it = vec.begin(); auto it_end = vec.end(); for(; it != it_end; ++it){ std::cout << (*it) << std::endl; } const int n = vec.size(); for(int i=0;i<n;++i){ std::cout << vec[i] << std::endl; }
|
|
数据拷贝与交换 |
1:void assign(const_iterator first,const_iterator last); 2:void assign(size_type n,const T& x = T()); 第一个相当于个拷贝函数,把first到last的值赋值给调用者;(注意区间的闭合) 第二个把n个x赋值给调用者;
vector<int> v1, v2; v1.push_back(10); v1.assign(10,7);//将v1重新赋值为10个7 for(auto it = v2.begin(); it !=v2.end(); ++it){ cout<<*it<<" "; } cout<<endl; for(auto i = v1.begin(); it !=v1.end(); ++it){ cout<<*it<<" "; } 输出结果: 10 20 30 40 50 7 7 7 7 7 7 7 7 7 7
交换: vector<int> vec(10,1);
1. 将list中数据全部移到temlist中,此时list中为空了 2. swap操作交换两个相同类型的容器的内容,一般的容器(除array外),交换两个容器内容的操作会保证非常快,因为并没有交换元素本身,而只是交换了两个容器的内部数据结构。
|
|
排序 |
std::sort(vec.begin(),vec.end()); //使用内部排序,如果vec内部是复杂结构,需要重载实现operator<操作 std::sort(vec.begin(),vec.end(), cmp ) cmp可以是一个函数对象类,或函数指针 或 lambda表达式; |
|
查找 |
std::binary_search std::lower_search std::upper_search
|

浙公网安备 33010602011771号