c++Vector插入操作

c++Vector插入操作

老规矩mark,如有误,欢迎指正!
首先Vector容器有两个插入函数insert()和emplace(),实现在容器指定位置处插入元素。

insert()

insert()用来实现在vector指定位置插入一个或多个元素,有多个语法格式,如下表:
在这里插入图片描述
在这里需要注意的是,pos都是指在vector指定位置之前插入。
例子:

#include<iostream>
#include<vector>
#include<array>
using namespace std:
int main()
{
    std::vector<int> demo{1,2};
    //第一种用法
    demo.insert(demo.begin(),3);//{3,1,2}
    //demo.insert(demo.begin()+1,3);//{1,3,2}一定注意是在指定位置之前插入 
    
    //第二种用法
    demo.insert(demo.begin()+1,2,4);//{3,4,4,1,2}
    
    //第三种用法
    std::array<int,3>arraytest{5,6,7};
    demo.insert(demo.end(),arraytest.begin(),arraytest.end());//{3,4,4,1,2,5,6,7}

    //第四种用法
    demo.insert(demo.end(),{8,9,10});//{3,4,4,1,2,5,6,7,8,9,10}

    return 0
}

emplace()

emplace()是c++11洗澡能的成员函数,用于在vector容器指定位置之前插入一个新的元素,与insert()区别就是每次只能插入一个元素。
函数:

iterator emplace(const_iterator pos,args...)

例子:

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    std::vector<int> demo1{1,2};
    //emplace() 每次只能插入一个 int 类型元素
    demo1.emplace(demo1.begin(), 3);//{3,2,1}
    for (int i = 0; i < demo1.size(); i++) {
        cout << demo1[i] << " ";
    }
    return 0;
}

比较
emplace(): 只能移动一个元素;效率更高
insert():可以移动一个或者多个元素;效率不如emplace()

#include <vector>
#include <iostream>
using namespace std;
class testDemo
{
public:
    testDemo(int num) :num(num) {
        std::cout << "调用构造函数" << endl;
    }
    testDemo(const testDemo& other) :num(other.num) {
        std::cout << "调用拷贝构造函数" << endl;
    }
    testDemo(testDemo&& other) :num(other.num) {
        std::cout << "调用移动构造函数" << endl;
    }

    testDemo& operator=(const testDemo& other);
private:
    int num;
};
testDemo& testDemo::operator=(const testDemo& other) {
    this->num = other.num;
    return *this;
}
int main()
{
    cout << "insert:" << endl;
    std::vector<testDemo> demo2{};
    demo2.insert(demo2.begin(), testDemo(1));

    cout << "emplace:" << endl;
    std::vector<testDemo> demo1{};
    demo1.emplace(demo1.begin(), 1);
    return 0;
}

参考:http://c.biancheng.net/view/6834.html

C++中,可以使用vectorinsert函数来插入元素。insert函数有多个重载形式,其中一个形式接受一个迭代器和一个值作为参数,将该值插入到指定位置之前。另一个形式接受一个迭代器和两个迭代器作为参数,将指定范围内的元素插入到指定位置之前。 例如,如果要在vector的末尾插入多个重复元素,可以使用fill_n函数结合insert函数来实现。首先,创建一个空的vector,然后使用fill_n函数和back_inserter函数将指定数量的重复元素插入vector的末尾。最后,使用循环遍历vector并输出结果。 以下是一个示例代码: ```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> v; fill_n(back_inserter(v), 10, 3); for(auto c:v) { cout << c << " "; } cout << endl; } ``` 输出结果为:3 3 3 3 3 3 3 3 3 3。 在这个示例中,使用fill_n函数和back_inserter函数将值为3的元素插入到空的vector中,插入的数量为10个。然后,使用循环遍历vector并输出结果。 #### 引用[.reference_title] - *1* [c++vector插入多个重复元素](https://blog.csdn.net/weixin_42496224/article/details/125760583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值