我使用insert时自动调整std :: vector的大小

时间:2017-11-14 23:11:51

标签: c++ vector

将元素插入到std :: vector的特定位置的优雅方法是什么? 如果std :: vector的大小小于某个位置。

例如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> vec(8);
    vec.insert(vec.begin() + 200, 5); // fail, I need auto-resize
}

1 个答案:

答案 0 :(得分:2)

使用std::vector::resize和适当的参数。说你有你的:

std::vector<int> vec(8);

只需使用:

vec.resize(201);
vec.insert(vec.begin() + 200, 5);

你也可以将它包装在你自己的模板函数中,这可以检查可能需要的分配:

template<class T>
void safe_insert(std::vector<T>& vec, const size_t pos, const T arg)
{
    if(vec.size() <= pos) vec.resize(pos);
    vec.insert(vec.begin() + pos, arg);
}

这样称呼它:

std::vector<int> vec(8);
safe_insert(vec, 200, 5);
std::cout << vec[200];

代码输出: 5