簡體   English   中英

如何將數據從`boost :: scoped_array`復制到`std :: vector`

[英]How to copy data from `boost::scoped_array` to `std::vector`

vector<int> vec;
boost::scoped_array<int> scpaInts;

scpaInts.reset(new int[10]);

for (int i=0; i<10; i++)
    scpaInts[i] = i*2;

vec.assign(&scpaInts[0], &scpaInts[9]+1);      // => method one
vec.assign(scpaInts.get(), scpaInts.get()+10); // => method two

問題1>我找到了兩種方法。 但我不確定它們是否正確或有更好的方法來做到這一點。

問題2>我們無法從boost :: scoped_array獲取有效長度嗎?

謝謝

問題1:兩種方法都可以。 指向數組元素的指針可以扮演隨機訪問迭代器的角色。 這個也很好

vec.assign(&scpaInts[0], &scpaInts[10]);

問題2:這是正確的,因為您無法獲得傳遞給函數的C樣式數組的長度。

兩者都可以。 但第二個對我來說更清楚。 boost::scoped_array作為簡單數組工作,你現在無法獲得數據大小。 要將其復制到矢量,您必須知道它的大小。 是關於scoped_array迭代器和大小的鏈接。

我選擇方法2:

vec.assign(scpaInts.get(), scpaInts.get()+10); // => method two

像普通的動態數組一樣:

int * a = new int[10];
...
vec.assign(a, a+10); // => method two

當然,方法1也適用,例如動態數組:

vec.assign(&a[0], &a[9]+1); // => method one

正如您所看到的 - 方法2看起來更簡單,因此更好。


並且,不,在作用域數組中沒有size()方法。

問題1:兩種方法都是正確的。

問題2:正確,它只是一個類似於std :: scoped_ptr的容器,它確保傳遞的指針(使用operator new[]手動創建)將使用operator delete [] 它不包含有關數組大小的任何信息。

這兩種方法對我來說都是正確的,但第二種方法肯定更清晰,因為你沒有將偏移分成91組件。 還有另外兩個選擇:

vec.assign(&scpaInts[0], &scpaInts[0] + 10);

或者在您需要之前不要創建向量(最好的選項):

vector<int> vec(scpaInts.get(), scpaInts.get() + 10);

暫無
暫無

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

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