微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++中的字符串向量迭代器

如何解决C++中的字符串向量迭代器

我只是想在字符串向量上获取迭代器,将迭代器传递给 'pos' 并与 pos 处的值一起传输到另一个函数,但是编译器告诉我在从 'const char*' 到 'size_t' 的 lambda 参数。我也得到这个标题 stl_algo.h:

不匹配调用 '(prototype::Monitor::setoptions(size_t)::) (const char&)' __f(__first);

#include <iostream>
#include <Windows.h>
#include <string.h>
#include <map>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdio>
.
.
void setoptions(size_t id) {
    switch(id){
        case 0:
            std::for_each(main_menu.lines.begin(),main_menu.lines.end(),[this](size_t pos){
                this->setoption(pos,main_menu.lines[pos]);
            });
            break;
        case 1:
            break;
    }
}

将所有这些都放在一个由“this”引用的类中,并且 setoption 与 setoptions 不同。我在其他地方读到,如果它只是将字符串指针的迭代器转换为 int 应该没问题,我也看到过这样使用的示例。

我也知道这整件事可能不是最好的方法,但我刚刚接触 C++,我正在尝试使用我学到的一些东西。

Win10 64 位 - gcc (MinGW.org GCC-6.3.0-1)

解决方法

当用 std::for_each() 迭代一个字符串向量时,传递给 lambda 的参数将是一个字符串,而不是一个 size_t 索引。这就是您收到转换错误的原因。

如果你需要一个索引,那么你将不得不改变你的 lambda 来单独跟踪索引,例如:

size_t pos = 0;
std::for_each(main_menu.lines.begin(),main_menu.lines.end(),[&,this](const string &s){ this->setOption(pos++,s); }
);

否则,干脆不要使用 std::for_each() 开头,例如:

for(size_t pos = 0; pos < main_menu.lines.size(); ++pos){
    setOption(pos,main_menu.lines[pos]);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。