将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g
Convert std::vector<std::pair<const K, V>*> to std::vector<std::pair<const K, V>>
我想将std::vector<std::pair<const K, V>*>
转换为std::vector<std::pair<const K, V>>
.但是,如您所知,由于pair<const K, V>
我无法分配。
我想可以有某种方式可以利用
template< class InputIt >
void assign( InputIt first, InputIt last );
来实现这一目标。但是,我找不到出路。
寻求建议。谢谢!!
只有当您尝试分配元素或调用某些函数(如insert
时,const
才是一个问题。 但是push_back
和emplace_back
会没事的。
一个解决方案:
template <typename Elem>
std::vector<Elem> deref_vec_elems( const std::vector<Elem*>& v ) {
std::vector<Elem> v2;
for ( Elem* e : v )
v2.push_back( *e );
return v2;
}
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++运算符<<调用::ostream而不是std::osttream
- 是std :: set&lt; std :: future&gt;不可能存在
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- BOOST ::变体无法解决运算符&lt;&lt;对于STD :: Ostream
- C++重载<<具有typedef'd std::vector
- 以x的倍数填充前导零,使用std::cout<<std::十六进制
- 错误:没有匹配'运算符<<"在'std::cout
- std::pair的默认构造函数<>将基本类型(int等)设置为零
- std::ostream&operator< & lt; (std:: ostream&压力,压力& &;val)
- 将std::endl传递给std::operator<<
- std::映射<>或std::vector<>在处理大型标志集时
- 重载& lt; & lt;使用命名空间std