对指针数组使用begin()、end()
Use of begin(), end() for Pointer Array
我有下面的代码
PositionSummary** psArray_= new PositionSummary*[instSize]
for (int k = 0; k < instSize_; k++)
{
PositionSummary* ps = new PositionSummary();
psArray_[k] = ps;
}
当我尝试按照下面的方式复制时,不起作用
std::copy(begin(psArray_),end(psArray_),std::back_inserter(psContainer_));
编译器报告"调用'begin(PositionSummary*&)没有匹配的函数",如何解决这一问题?
PositionSummary* psArray_ [instSize];
这会起作用,但可能不适合您,因为我猜instSize不是编译时常数。你可以通过使用向量而不是自己分配内存来解决这个问题:
std::vector<PositionSummary*> psArray_;
for (int k = 0; k < instSize; k++)
psArray_.push_back (new PositionSummary());
std::copy(psArray_.begin()),psArray_.end(),std::back_inserter(psContainer_));
为了进一步改进,可以考虑在矢量中使用智能指针(这样以后就不必担心释放)。虽然我不知道你的代码的更大上下文,但我仍然想知道为什么副本是必要的——为什么不直接在最终应该保存它的数据结构中构建你的向量呢?
psArray
只是一个指针。std::begin
和std::end
不可能知道指针指向的数组的长度。它们适用于普通数组,而不适用于指向数组的指针。
你可以这样做:
std::copy(psArray_, psArray_ + instSize, std::back_inserter(psContainer_));
假设CCD_ 4是容纳指向CCD_ 5的指针的容器。
根据应用程序的详细信息,您最好使用std::vector
,无论是智能指针还是值:
std::vector<some_smart_pointer<PositionSummary>> psArray_;
或
std::vector<PositionSummary> psArray_;
如果不需要引用语义,第二个选项可能是更好的。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 了解向量中的 .begin 和 .end
- C++ const char with .begin() and .end()
- 为什么 std::find( s.begin(), s.end(), val ) 比集合 s 的 s.find(val) 慢 1000 倍<int>?
- 如何使用vector.begin()和vector.end()遍历矩阵?
- 如何实现 cbegin() 和 cend() 从 begin() 和 end() ?
- C++ - 空的 std::list begin() 和 end() 不相等
- 为什么std::begin()和std::end()适用于固定数组,而不适用于动态数组
- C++代码"x.erase(std::remove(x.begin(), x.end(), ), x.end())"是如何工作的?
- begin(),end()和cbegin(),cend()之间的区别是什么?
- 在模板化数据结构上调用 begin() 或 end()
- 重载 std::begin() 和 std::end() 用于非数组
- 使用 std::set 的 .begin() 和 .end() 函数会产生意想不到的结果
- 使用范围V3视图来实现begin()/end()方法
- 为 C++ 选择 begin() 和 end()
- std::begin() 和 std::end() 不适用于类中的未知长度数组
- 在 std::list 中,std::d istance(it.begin(), std::p rev(it.end()
- 使用迭代器的二叉搜索,为什么我们使用"(end - begin)/2"?