opencv03-补充-vector的操作
参考:https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html
构造方法(具体介绍看API文档)
class Student {public:private:string name;};int main() {vector<int>();vector<int> v1;vector<Student> v2; // 存放自定义类vector<string> v3;vector<vector<int> >; //注意空格。这里相当于二维数组int a[n][n];vector<int> v5 = {1, 2, 3, 4, 5}; //列表初始化,注意使用的是花括号vector<string> v6 = {"hi", "my", "name", "is", "lee"};vector<int> v7(5, -1); //初始化为-1,-1,-1,-1,-1。第一个参数是数目,第二个参数是要初始化的值vector<string> v8(3, "hi");vector<int> v9(10); //默认初始化为0vector<int> v10(4); //默认初始化为空字符串return 0;
}
增加元素和访问元素
int main() {vector<int> v1;v1.push_back(2);v1.push_back(3);v1.push_back(4);// 使用索引访问元素for (int i = 0; i < v1.size(); i++) {cout << v1[i] << endl;//v1[i] = 100;//cout << v1[i] << endl;}/*reference at(int pos):返回pos位置元素的引用reference front():返回首元素的引用reference back():返回尾元素的引用iterator begin():返回向量头指针,指向第一个元素*/cout << ".................." << endl;cout << v1.at(2) << endl; // 返回pos位置元素的引用cout << v1.front() << endl; // 返回首元素的引用int a = v1.back(); //返回尾元素的引用cout << a << endl;// 使用迭代器访问元素vector<string> v6 = {"hi", "my", "name", "is", "lee"};for (vector<string>::iterator iter = v6.begin(); iter != v6.end(); iter++) {cout << *iter << endl;//下面两种方法都都可以检查迭代器是否为空cout << (*iter).empty() << endl;cout << iter->empty() << endl;}// 使用迭代器反向访问元素for (vector<string>::reverse_iterator iter = v6.rbegin(); iter != v6.rend(); iter++) {cout << *iter << endl;}return 0;
}
插入函数、大小函数、删除函数
#include <vector>
#include <array>using namespace std;
using namespace cv;int main() {std::vector<int> demo{1, 2};//第一种格式用法: 向量中迭代器指向元素前增加一个元素xdemo.insert(demo.begin() + 1, 3);//{1,3,2}//第二种格式用法: 向量中迭代器指向元素前增加n个相同的元素xdemo.insert(demo.end(), 2, 5);//{1,3,2,5,5}//第三种格式用法:向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据std::array<int, 3> test{7, 8, 9};demo.insert(demo.end(), test.begin(), test.end());//{1,3,2,5,5,7,8,9}//第四种格式用法:向量中迭代器指向元素前插入一个数组demo.insert(demo.end(), {10, 11});//{1,3,2,5,5,7,8,9,10,11}for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}// 输出结果为:1 3 2 5 5 8 9 10 11cout << "size:" << demo.size() << endl; //10cout << "capacity:" << demo.capacity() << endl; //10cout << "max_size:" << demo.max_size() << endl; //4611686018427387903cout << "empty:" << demo.empty() << endl; //0 判断向量是否为空,若为空,则向量中无元素//demo.clear(); // 清空向量中所有元素//cout << "empty:" << demo.empty() << endl; // 1demo.pop_back(); // 删除向量中最后一个元素for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}// 输出结果为:1 3 2 5 5 7 8 9 10cout << "---------------------------------" << endl;// iterator erase(iterator it):删除向量中迭代器指向元素demo.erase(demo.begin() + 1);for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}//输出结果为: 1 2 5 5 7 8 9 10cout << "---------------------------------" << endl;//iterator erase(iterator first,iterator last):删除向量中[first,last)中元素demo.erase(demo.begin() + 1, demo.end() - 2);for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}//输出结果为: 1 9 10return 0;
}
其他函数
int main() {std::vector<int> demo{12, 32, 23, 58, 52, 17, 28, 39, 10};// 1. 排序sort(demo.begin(), demo.end());for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}// 输出结果为: 10 12 17 23 28 32 39 52 58cout << endl;// 倒置reverse(demo.begin(), demo.end());for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}// 输出结果为: 58 52 39 32 28 23 17 12 10// void assign(int n,const T& x):设置向量中前n个元素的值为x,并将集合的size设置为:ndemo.assign(3, -1); //cout << "size:" << demo.size() << endl; //size:3for (int i = 0; i < demo.size(); i++) {cout << demo[i] << " ";}// 输出结果为: -1 -1 -1cout << endl;//void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素std::vector<int> demo2{12, 32, 23, 58, 52, 17, 28, 39, 10};demo2.assign(demo.begin(), demo.end());for (int i = 0; i < demo2.size(); i++) {cout << demo2[i] << " ";}return 0;
}