首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免将向量的全部值复制到另一个容器

如何避免将向量的全部值复制到另一个容器
EN

Stack Overflow用户
提问于 2020-05-28 18:46:11
回答 1查看 69关注 0票数 0

如何避免将向量kws的全部值复制到下面的req_kws (向量的向量)中,同时在代码中保留两个容器kwsreq_kws

代码语言:javascript
复制
 vector<vector<string>> req_kws;
 for (string& request : requests) { 
    vector<string>& kws = req_kws.back(); //<-- define &kws to empty req_kws
    kws = split(kwsStr, ",");   //split is a parsing function upon string kwsStr
    req_kws.push_back(kws);
 }

我用的是3号线

代码语言:javascript
复制
vector<string>& kws = req_kws.back();

这样,没有存储kws向量的所有值,而只是将其引用存储到req_kws中。

但是,我在运行时得到了一个分段错误。有办法解决吗?

谢谢你的帮助。

附加说明;

请注意我上面提到的约束,我需要保持第4行( kws )和第5行( req_kws )的完整,并且希望使用引用(&)的第3行或类似的东西来从存储到kws和req_kws的相同值中节省执行时间。我有代码的其他部分与相同的问题,这是更复杂的,所以我不能简单地将两行4和5合并为一。

补充问题(类似问题):

感谢您在下面的解决方案。但是,下面的情况如何,它类似于上面的情况,但更复杂。

代码语言:javascript
复制
vector<unordered_map<string, string>> ads_kwsBids;
for (const auto& kwBid : kwsBids) {
    …
    unordered_map<string, string>& kwsBidsMap = ads_kwsBids.back(); //to prevent from being whole container copied
    for (unsigned j = 0; j < nsize; j++) {
        unsigned jdx = 2 * j;
        kwsBidsMap[splitedStr[jdx]] = splitedStr[jdx + 1];// constructing map kwsBidsMap
    }
    ads_kwsBids.push_back(kwsBidsMap);
}

在第四行,就是,

代码语言:javascript
复制
unordered_map<string, string>& kwsBidsMap = ads_kwsBids.back();

由于参考&的存在,产生了分割故障。但是,引用也是防止kwsBidMap被复制到ads_kwsBids中的引用。是否仍有一种方法可以在kwsBidMap上使用引用kwsBidMap而不获取分割错误?

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 01:25:44

在所示的代码中,req_kws是一个空向量。对空向量调用back()是未定义的行为。您需要先向向量添加一个元素,或者重写代码以不依赖于有一个值。

据我所知,你想做的事情,我觉得很简单

代码语言:javascript
复制
req_kws.push_back(split(request, ","));

应该就够了。

或者,您可以将循环重写为

代码语言:javascript
复制
for (string& request : requests) { 
    req_kws.push_back(split(request, ","));
    vector<string>& kws = req_kws.back();
}

这将拆分请求字符串,将其存储在req_kws向量中,然后创建对新添加的元素的kws引用。根据您对其所做的其他操作,您可能需要在for循环之前添加req_kws.reserve(requests.size());,以避免在向向量添加时重新分配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62072285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档