C++ 编程 : Error when assigning the iterator to vector

标签 c++ c++11

    vector<vector<string> > vvs;
    vector<string> vs;

    vs.push_back("r1-c1");
    vs.push_back("r1-c2");
    vs.push_back("r1-c3");

    vvs.push_back(vs);

    for (vector<vector<string> >::iterator vvsi = vvs.begin(); vvsi != vvs.end(); vvsi++) {
        vector<string> vec_str = *vvsi;
        for (vector<string>::iterator vsi = vec_str.begin(); vsi != vec_str.end(); vsi++) {
            cout << *vsi << ", ";
        }
        cout << "\n";
    }

在上面的 C++ 代码中,为了避免 vector(vector vec_str = *vvsi) 的复制,我尝试了下面的代码

vector<string> *vec_str = vvsi.base(); //Working. which (returns a const pointer&)     
vector<string> *vec_str = &(*vvsi); //Working. Assigning the address

但是

vector<string> *vec_str = vvsi; //Error. Not able to assign

错误

(build error : cannot convert 'std::vector<std::vector<std::basic_string<char> > >::iterator to 'std::vector<std::basic_string<char> >*' in initialization)

以整数为例

    int a=10;
    int *b = &a; //working. Assigning address
    int *c = &(*b); //working. Assigning address
    int *d = b; //working. Assigning address
    *c=11;
    std::cout << a<<"\n";
    *d=12;
    std::cout << a<<"\n";

在 vector 的情况下,为什么在赋值时构建错误(无法从 C++ 迭代器文档中理解)?

最佳答案

迭代器不是指针。它的接口(interface)被用作指针,但它肯定不是指针。

但是,如果您只是想遍历父 vector 中每个 vector 的元素,则无需将其分配给临时 vector 或指针,迭代器本身就足够了:

for (vector<vector<string> >::iterator vvsi = vvs.begin(); vvsi != vvs.end(); ++vvsi) {
    for (vector<string>::iterator vsi = vvsi->begin(); vsi != vvsi->end(); ++vsi) {
        cout << *vsi << ", ";
    }
    cout << "\n";
}

此外,由于您将 c++11 作为问题中的标签,我认为您可能对更现代的表达方式感兴趣:

for(auto& vst : vvs){
    for(auto& st : vst){
        cout << st << ", ";
    }
    cout << endl;
}

关于C++ 编程 : Error when assigning the iterator to vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924515/

相关文章:

c++ - 在析构函数中显示对象名称

c++ - 减去两个对象的无序 std::vector

c++ - 我如何告诉 clang-format 缩进可见性修饰符?

c++ - move 语义在哪里有益的好例子

android - 如何使用 Superpowered lib 为 NDK 小于 23 构建应用程序?

c++ - 为什么可以使用 std::ref 将成员函数用作可调用类型?

c++ - CMAKE include_directories

c++ - 在 Eigen 中初始化矩阵

c++ - 只接受指针类型参数的模板

c++ - 使用外部模板时出现链接器错误