c++r如何实现向量中插入多个元素

清华邓俊辉数据结构的第二章,向量的插入函数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;
}