[英]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.