一、vector插入不重复元素
在使用vector插入元素时,有时需要保证不重复插入元素,可以通过以下方式进行实现:
vectorv; int num = 5; if(find(v.begin(), v.end(), num) == v.end()) { v.push_back(num); }
上述代码中使用了STL库中的find函数,如果查找到num这个元素,则返回其在vector中的位置,否则返回vector的end位置。如果查找结果为end位置,则说明vector中没有这个元素,可以将其插入到vector中。
二、cvector插入
cvector是C++98标准之前的写法,使用指针操作数组。cvector插入元素的方式如下:
int arr[5] = {1, 2, 3, 4, 5}; int* ptr = arr; int len = 5; while(len--) { cout << *(ptr++) << " "; }
上述代码中,由于cvector使用指针来操作数组,要判断插入的位置是否越界,同时插入元素时需要将后续元素向后移动,相比vector效率较低。
三、vector和arraylist区别
vector是C++ STL库中的容器,arraylist是Java集合框架中的类,它们之间的区别主要在以下几个方面:
1. arraylist只能存储对象类型,而vector可以存储对象和基本数据类型;
2. arraylist支持动态增长和缩小,而vector只支持动态增长;
3. arraylist是线程安全的,而vector不是线程安全的。
四、vector函数
除了插入函数外,vector还有一些其他常用的函数:
1. push_back:将元素插入到vector末尾;
2. pop_back:删除vector末尾最后一个元素;
3. size:返回vector中元素的个数;
4. capacity:返回vector当前分配的空间大小,即可以容纳的元素个数。
五、vector insert函数
vector中的insert函数可以在任意位置插入元素,具体使用方式如下:
vectorv; v.insert(v.begin() + 2, 3); // 在第3个位置插入元素3
此外,还可以一次性插入多个元素:
vectorv; int arr[3] = {1, 2, 3}; v.insert(v.begin() + 1, arr, arr+3); // 在第2个位置插入元素1, 2, 3
六、vector的用法
vector有很多用法,其中常见的有遍历、排序、查找等:
1. 遍历:
vectorv = {1, 2, 3}; for(int i=0; i 2. 排序:
vectorv = {3, 1, 2}; sort(v.begin(), v.end()); // 将vector按升序排序 3. 查找:
vectorv = {1, 2, 3}; int num = 2; bool isExist = (find(v.begin(), v.end(), num) != v.end()); // 在vector中查找元素是否存在 七、vector增加一个元素
如果只需要在vector中增加一个元素,可以使用push_back函数:
vectorv = {1, 2, 3}; v.push_back(4); // 往vector中增加一个元素4 八、vector insert用法
上文已经介绍了vector insert函数的基本用法,还可以在指定位置插入重复元素,或者根据条件进行插入:
vectorv = {1, 2, 3}; auto it = v.begin() + 2; // 获取第3个元素的迭代器 v.insert(it, 2, 0); // 在第3个位置插入两个元素0 v.insert(it, {4, 5, 6}); // 在第3个位置插入三个元素4, 5, 6 v.insert(it, {7, 8, 9}, [](int x){ return x > 7; }); // 在第3个位置插入大于7的元素7, 8, 9 九、oracle插入clob
在使用Oracle数据库时,如果需要插入比较大的文本数据,可以使用clob类型。插入clob类型的代码如下:
string content = "xxx"; // 待插入的文本数据 string sql = "INSERT INTO table_name VALUES (:clob)"; // 插入clob的SQL语句 OracleConnection conn; // 创建Oracle连接 OracleCommand cmd(conn, sql); // 创建Oracle命令 OracleClob clob(cmd, 1); // 创建Oracle Clob对象 clob.Write(content.c_str(), content.size()); // 写入clob对象 cmd.ExecuteNonQuery(); // 执行SQL语句