c++ - 在自己的 StringTokenizer 创建的 vector 中找到一个项目

标签 c++

我已经制作了自己的 StringTokenizer 类:

class StringTokenizer {
private:
    vector<string> tokens; //output
    string strIn;          //input
public:
    StringTokenizer(string strIn) {
        this->strIn = strIn;

        string str(strIn);
        string tmpstr;
        stringstream ss(str);

        while(ss >> tmpstr)
            tokens.push_back(tmpstr);
    }

    vector<string> getTokens() {
        return tokens;
    }
}

我有我的主要功能

int main() {
    string str = "a b c d";
    StringTokenizer st(str);

    if(find(st.getTokens().begin(), st.getTokens().end(), item) != st.getTokens().end()) {
        cout << "found";
    } else {
        cout << "not found";
    }
}

当函数返回 true 时,一切正常。否则程序崩溃。我做错了什么?

最佳答案

您的代码中有未定义的行为,getTokens()通过 value 返回一个 vector ,你调用它两次(一次为 begin() ,一次为 end() )这意味着你的两个迭代器不指向同一个容器。这根本行不通。然后,您第三次调用它来比较 find 的结果出于同样的原因,这也是不正确的。

您可以通过将其更改为轻松解决此问题:

auto tokens = st.getTokens();
if(find(tokens.begin(), tokens.end(), item) != tokens.end())

或者您可以返回 const vector<string>&来自 getTokens() .

关于c++ - 在自己的 StringTokenizer 创建的 vector 中找到一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662708/

相关文章:

c++ - 使用Cmake编译LZO时提示找不到任何VS实例

C++ BitBlt 显示棋盘和偏色

c++ - 是否可以找出两个模板参数之间的表达式类型?

c++ - 如何加载和更新 XML

c++ - OpenCV cvSet2d .....这是做什么的

html - CGI POST 方法不起作用

c++ - 堆栈溢出运行时错误c++

c++ - 将文本文档转换为字符数组 C++

c++ - 如何延长OpenCV中绘制的线?

c++ - 使用 boost 生成正态随机数的问题