将元素插入到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
}
答案 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 。