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