gpt4 book ai didi

c++ - 如何从包含最终情况的函数返回迭代器

转载 作者:行者123 更新时间:2023-11-30 04:48:01 24 4
gpt4 key购买 nike

在 C++ 中,我需要通过字符串反向搜索包含一对的 vector 。我不能使用 map ,因为字符串不是唯一的并且顺序很重要。然后,如果找到该字符串,我想返回一个前向迭代器;如果找不到该字符串,我想返回一个结束迭代器。

请参阅下面我当前的代码。找到字符串时没有问题,但如果找不到字符串,我会在 main 的条件语句中遇到段错误。

vector<pair<string, int>>::iterator prev_it(const string& pred, 
vector<pair<string, int>> prevpreds) {
vector<pair<string, int>>::reverse_iterator rit;
for(rit = prevpreds.rbegin();
rit != prevpreds.rend(); ++rit) {
if (rit->first == pred) {
return (rit+1).base();}
}
if(rit == prevpreds.rend()) {
return prevpreds.end();
}
}

主要是:

int main() {
vector<pair<string, int>> test;
for(int i = 0; i <= 5; ++i) {
pair<string, int> mypair;
mypair = make_pair("X"+to_string(i%4+1), i+1);
test.emplace_back(mypair);
}
string tpred = "X"+to_string(6);

vector<pair<string, int>>::iterator tit;
tit = prev_it(tpred, test);

if (tit != test.end()) {
cout << tit->first << " " << tit->second << endl;
}
else {cout << "This is the end." << endl;}
}

如果 tpred 是 X1 到 X4 之一,则代码有效。如果 tpred 是 X6(即不是测试元素),那么我会得到一个段错误。我希望能够做的是返回结束前向迭代器,然后像在 main() 中一样,有一个基于此的条件。

编辑:我是 c++ 的新手(大约一年)。我正在返回一个前向迭代器,因为我需要稍后使用迭代器,这看起来更清楚(但我可能是错的)。据我了解, multimap 允许非唯一键,但会订购唯一键。我应该更清楚地说时间顺序很重要,而不是键顺序。我不喜欢在开发时使用 auto,因为我喜欢查看我正在使用的容器元素/迭代器,但要点。

最佳答案

您正在使用已破坏对象的迭代器。通过引用传递 prevpreds,因此迭代器保持有效。

vector<pair<string, int>>::const_iterator prev_it(const string& pred,
const vector<pair<string, int>> &prevpreds)
{
vector<pair<string, int>>::const_reverse_iterator rit;
for (rit = prevpreds.rbegin();
rit != prevpreds.rend(); ++rit)
{
if (rit->first == pred)
{
return (rit + 1).base();
}
}

return prevpreds.end();
}

int main()
{
// ...

vector<pair<string, int>>::const_iterator tit; // <-- uses const iterator
tit = prev_it(tpred, test);

// ...
}

关于c++ - 如何从包含最终情况的函数返回迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com