簡體   English   中英

將矢量引用復制到另一個

[英]Copying a vector reference to another

我有一個結構,例如SubscriptionData。 在函數1中聲明了兩個類型的變量。

SubscriptionData aSubscriptionData;
SubscriptionData aResultSubscriptionData;

該結構本身具有另一個結構,該結構又具有另一個結構的向量。 向量在下面給出

aSubscriptionData.apn_config_file.apn_config

我已經正確初始化了結構。 現在,我調用一個函數來填充aSubscriptionData。 然后,我調用另一個函數的原型如下。

void breakSubDataLen(ImsMsg::SubscriptionData& aSubscriptionData, ImsMsg::SubscriptionData& aResultSubscriptionData);

在功能breakSubDataLen()中,我應該將元素從aSubscriptionData.begin()+ 3復制到aSubscriptionData.end()到結構aResultSubscriptionData。

我正在為此進行以下操作。

std::copy(aSubscriptionData.apn_config_file.apn_config.begin() + 3, 
    aSubscriptionData.apn_config_file.apn_config.end(),
    aResultSubscriptionData.apn_config_file.apn_config.begin());

它似乎不起作用。 誰能幫我嗎?

std::copy不分配元素; 您必須確保目標范圍內有足夠的空間來容納源范圍內的所有元素。

常用的方法是使用std::back_inserter ,它調用push_back將每個元素插入到容器中:

std::copy(source.begin(), source.end(), std::back_inserter(destination));

另一種常見的方法是使用resize在目標序列中預分配足夠的空間:

destination.resize(std::distance(source.begin(), source.end()));
std::copy(source.begin(), source.end(), destination.begin());

當然,這兩種方法具有不同的行為。 使用std::back_inserter ,保留序列中的任何元素,並在現有元素之后插入新元素。 使用resize方法,所有現有元素都將被覆蓋。 您還可以使用resize方法並保留所有現有元素:

const std::size_t original_size = destination.size();
destination.resize(destination.size() + 
                   std::distance(source.begin(), source.end());

std::copy(source.begin(), source.end(), destination.begin() + original_size);

(這要求destination是一個可隨機訪問的容器,如std::vector ;如果不是,則必須相應地修改代碼。)

通過將aResultSubscriptionData.apn_config_file.apn_config.begin()作為std::copy的第三個參數傳遞,您告訴它您已經分配了足夠的空間來分配.begin()開始的元素。 如果向量中包含0個元素,那么.begin().begin() + X顯然不會引用有效的迭代器。 如果向量已經包含足夠的元素,或者調整了大小,則可以將元素復制到新的向量中。

您極有可能要使用vector的范圍插入。 我相信這樣會更有效率:

aResultSubscriptionData.apn_config_file.apn_config.insert(0, aSubscriptionData.apn_config_file.apn_config.begin() + 3, aSubscriptionData.apn_config_file.apn_config.end());

暫無
暫無

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

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