【发布时间】:2023-04-07 06:15:01
【问题描述】:
我知道back_inserter 是一个容器“适配器”,但它是什么意思?如果我以函数std::copy() 为例,它将向量的第三个参数输出迭代器/指针复制,那么我应该给出该向量的back_inserter 而不是last iterator:
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main(){
vector<int> vec1 = {1,2};
vector<int> vec2 = {3,4};
copy(vec2.begin(), vec2.end(), back_inserter(vec1)); //back_inserter used to enhance memory allocation for 2 new elements?
for(auto i:vec1){
printf("%i\n", i);
}
}
工作正常,但是这个版本不行:
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main(){
vector<int> vec1 = {1,2};
vector<int> vec2 = {3,4};
copy(vec2.begin(), vec2.end(), vec1.end()); // the same pointer as gives back_inserter but without any fancy allocation and therefor crash?
for(auto i:vec1){
printf("%i\n", i);
}
}
现在我只给出了要复制的向量的最后一个迭代器/指针。那么back_inserter 容器适配器的作用是什么?现在对我来说,它只为新元素分配空间,而“仅”最后一个指针是不够的。我可以通过malloc 进行手动工作以放大该矢量/容器吗?
【问题讨论】:
标签: c++ vector iterator adapter