簡體   English   中英

對指針數組使用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 *&)”,該如何解決?

psArray只是一個指針。 std::beginstd::end可能無法知道指針指向的數組的長度。 它們適用於純數組,不適用於指向數組的指針。

您可以改為:

std::copy(psArray_, psArray_ + instSize, std::back_inserter(psContainer_));

假設psContainer_是一個容器,其中包含指向PositionSummary指針。

根據您的應用程序的詳細信息,最好使用智能指針或值的std::vector

std::vector<some_smart_pointer<PositionSummary>> psArray_;

要么

std::vector<PositionSummary> psArray_;

如果您不需要引用語義,則第二種選擇可能更好。

這是行不通的,因為psArray_根本不是數組,而是一個指針。 可能知道它指向一個特定大小的數組,但是編譯器沒有(一般)了解這一點的方法。 如果要使其成為數組,則可以正常工作。 嘗試像這樣聲明psArray_:

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_));

為了進一步改善,您可以考慮在向量中使用smartpointer(因此不必擔心以后釋放)。 盡管我不知道代碼的更大上下文,但我仍然想知道為什么完全需要復制-為什么不直接在最終應該保留它的數據結構中直接構造向量?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM