繁体   English   中英

将std :: stable_partition和:: iterator与向量一起使用

[英]use std::stable_partition and ::iterator with a vector

我正在尝试组织一个可能包含以下内容的向量:

[0]:  "people:"
[1]:  "James"
[2]:  "Jhones"
[3]:  "unknown person"
[4]:  "Mary"
[5]:  "Bob"
[6]:  "unknown person"
[7]:  "hobbies:"
[8]:  "Baseball"
[9]:  "unknown hobbies"
[10]: "Ping-pong"
[11]: "FootBall"
[12]: "unknown hobbies"
...

为了整理信息,我希望每个以“ unknown”开头的字符串都位于“ go up”的正下方,最后一个值以“:”结尾

这会给我:

[0]:  "people:"
[1]:  "unknown person"
[2]:  "unknown person"
[3]:  "James"
[4]:  "Jhones"
[5]:  "Mary"
[6]:  "Bob"
[7]:  "hobbies:"
[8]:  "unknown hobbies"
[9]:  "unknown hobbies"
[10]: "Baseball"
[11]: "Ping-pong"
[12]: "FootBall"
...

为此,我决定使用std :: stable_partition。 这是我的功能:

std::vector<std::string> Organize(std::vector<std::string> vec) {
    using namespace std;
    auto it = find_if(vec.rbegin(), vec.rend(), [](auto a) {return a.back() == ':'; });
    stable_partition(it.base(), vec.end(), [](string s) {return s_startswith(s, "unknown"); });
    for (string str : vec)
        cout << " --> " << str << endl;
    return vec;
}

语音功能s_startswith:

bool s_startswith(std::string const &str, std::string const &fnd) {
    return (str.rfind(fnd, 0) == 0);
}

我以为它可能有用,但是显示了以下错误消息:

我想我了解导致错误的原因,但我不知道如何纠正错误...

如果这种“组织”没有意义,请不要担心。 它是完美的,但是为了使它更重要,我将其简化了很多。

请问你能帮帮我吗?

我想问题出在拉姆达。 字符串a为空。 访问a.back()无效。

auto it = find_if(vec.rbegin(), vec.rend(), [](auto a) {return a.back() == ':'; });

确保所有矢量元素都不为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM