清华邓俊辉数据结构的第二章,向量的插入函数Insert,可实现在秩为r的位置插入元素e。
0001 /******************************************************************************************
0002 * Data Structures in C++
0003 * ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3
0004 * Junhui DENG, deng@tsinghua.edu.cn
0005 * Computer Science & Technology, Tsinghua University
0006 * Copyright (c) 2003-2021. All rights reserved.
0007 ******************************************************************************************/
0008
0009 template <typename T> //将e作为秩为r元素插入
0010 Rank Vector<T>::insert ( Rank r, T const& e ) { //assert: 0 <= r <= size
0011 expand(); //若有必要,扩容
0012 for ( int i = _size; i > r; i-- ) _elem[i] = _elem[i-1]; //自后向前,后继元素顺次后移一个单元
0013 _elem[r] = e; _size++; //置入新元素并更新容量
0014 return r; //返回秩
0015 }
现在需要插入多个元素,即插入数组e。
求指教,谢谢各位大佬!
您好,要实现向量中插入多个元素,可以对原始插入函数进行修改或添加一个新的插入函数。
给你看下我改进的代码吧;
template <typename T>
Rank Vector<T>::insert(Rank r, const T* e, Rank n) {
assert(r >= 0 && r <= _size); // 断言:插入位置合法
if (n == 0) {
return r; // 若插入元素数量为0,直接返回插入位置
}
expand(_size + n); // 若有必要,扩容
// 将原有元素及插入位置之后的元素后移
for (int i = _size - 1; i >= r; i--) {
_elem[i + n] = _elem[i];
}
// 插入新元素
for (int i = 0; i < n; i++) {
_elem[r + i] = e[i];
}
_size += n; // 更新元素数量
return r; // 返回插入位置的秩
}
我封装的这个函数需要接受来给你个参数,也就是插入位置 r 和一个指向待插入元素数组的指针 e,以及待插入元素的数量 n。函数首先进行扩容,然后将原有元素及插入位置之后的元素后移,最后将待插入的元素复制到插入位置。函数返回插入位置的秩。
如果你要使用,给你个调用案例,很简单,传入去一个数组,直接就能插入到特定位置,很方便。
int main() {
Vector<int> vec;
vec.insert(0, 5); // 在位置0插入元素5
int arr[] = {1, 2, 3};
vec.insert(1, arr, 3); // 在位置1插入数组 {1, 2, 3}
return 0;
}