c++ - 如何将字符串迭代器指向的数据推回到字符串 vector 中

标签 c++ string vector iterator

我想标记一个字符串并添加到一个 vector 中,但我现在所能做的就是通过迭代器访问它们,如下所示。

vector<string> ExprTree::tokenise(string expression){

    vector<string> vec;
    std::string::iterator it = expression.begin();

    while ( it != expression.end()) {

        cout << "it test " << (*it) << endl;
        vec.push_back(*it); // wrong!
        it++;
    }

当我输入 (10 + 10) * 5 输出是

( 
1
0 
+ 
1
0
) 
*
5

这是我想要的,但我怎样才能真正将它们添加到 vector 中呢?

最佳答案

注意 std::string 的迭代器指向 char , 所以 *it不是 std::string ,而是一个 char , 不能是 push_back编入std::vector<std::string>直接。

你可以把它改成

vec.push_back({*it});     // construct a temporary string (which contains *it) to be added

或使用 emplace_back相反:

vec.emplace_back(1, *it); // add a string contains 1 char with value *it

关于c++ - 如何将字符串迭代器指向的数据推回到字符串 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43795086/

相关文章:

c++ - 编译错误 : Directory has same name as c++ standard header <list>

c++ - 如何为指针类变量执行 setter 和 getter 函数?

python - 在python 3.x和2.x中统一区分str/unicode和bytes/str的方法是什么?

c# - 在空值和 string.Empty 上使用 == 或 .Equals()

java - 如何实现 SAX 处理程序的 character() 函数以实现最少的内存使用?

C++ 二维 vector - 将 int 转换为 double

c++ - 将 std::set 分配给 2D std::vector of ints

android - fragment 着色器未针对 Android 源代码末尾的随机符号进行编译

C++ 使用 *this 从静态方法调用抽象方法

c++ - 在我为我的二维 vector 赋予第一个值后控制台关闭