C++ 从具有不同分配器的stl容器构造可以吗?

C++ 从具有不同分配器的stl容器构造可以吗?,c++,stl,allocation,xeon-phi,cilk-plus,C++,Stl,Allocation,Xeon Phi,Cilk Plus,说我有 std::vector<T, allocator1=default allocator in STL> A std::vector<T, allocator2=some other allocator> B 我在Cilk Plus中使用uu offload::shared_分配器作为分配器2,用于从主机CPU卸载到Xeon Phi协处理器 我可以从B构造A吗 std::vector<T> A{B.begin(), B.end()}; 更一般地说

说我有

std::vector<T, allocator1=default allocator in STL>  A

std::vector<T, allocator2=some other allocator> B
我在Cilk Plus中使用uu offload::shared_分配器作为分配器2,用于从主机CPU卸载到Xeon Phi协处理器

我可以从B构造A吗

std::vector<T> A{B.begin(), B.end()};

更一般地说,对于哪种类型的STL函数,不同的分配器将起作用?

如注释中所述,构造函数

std::vector<T> A{B.begin(), B.end()};
它应该打印:

1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000

你调用的不是复制构造函数。好吧,对不起…我会更改标题,只要它们不是平凡的指针,std::vector::iterator不是与std::vector::iterator不同的类型吗?@nabijaczleweli不重要,也不必,如果迭代器很可怕,双迭代器构造函数接受所有输入迭代器。@T.C.刚查过,你是对的。我是个笨蛋,在想别的事情,抱歉,所以从C++的角度来看,一切都很好。但从Intel Xeon Phi协处理器的角度来看,您在卸载区域使用B,但A呢?关于使用C++代码卸载代码,我有很多要学习的地方,所以我可能是湿的,但是我不相信A可以在卸载区域中使用,并且在第一次使用分配器时,你不会把B放在卸载代码中使用吗?但是如果A是在协处理器上构建的,那么你就把一个元素插入到一个如果在主机端迭代B,会发生什么?这不会让你陷入困境吗?A是用B中元素的副本构建的。更改A对B没有影响,反之亦然。谢谢,,。。这个例子非常有用,基本上我不能移动构造新对象,如果它们有不同的分配器,对吗?
1
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000