C++ 使用->;在2D向量上迭代;(箭头)并替换值:C++;

C++ 使用->;在2D向量上迭代;(箭头)并替换值:C++;,c++,C++,我试图使用迭代器遍历2D向量,并用另一个符号替换特定符号。 如果您查看下面的第一个代码,您会注意到替换“!”没有问题带“+”(在标准向量中)。但是,如果我对2D向量尝试相同的方法,编译器会显示以下错误: vec.at(col-row->begin())='+'编译器错误C2679二进制“运算符”:未找到接受类型为“type”的右操作数的运算符(或没有可接受的转换) #包括 #包括 #包括 使用名称空间std; int main() { 向量myints{'.','.','!','.}; 向量::

我试图使用迭代器遍历2D向量,并用另一个符号替换特定符号。 如果您查看下面的第一个代码,您会注意到替换“!”没有问题带“+”(在标准向量中)。但是,如果我对2D向量尝试相同的方法,编译器会显示以下错误:
vec.at(col-row->begin())='+'编译器错误C2679二进制“运算符”:未找到接受类型为“type”的右操作数的运算符(或没有可接受的转换)

#包括
#包括
#包括
使用名称空间std;
int main()
{
向量myints{'.','.','!','.};
向量::迭代器p;
p=查找(开始(myints),结束(myints),“!”;
如果(p!=结束(myints)){
myints.at(p-begin(myints))='+';
}
用于(自动i:myints){
cout::迭代器行;
向量::迭代器列;
对于(row=vec.begin();row!=vec.end();++row)
{
对于(col=行->开始();col!=行->结束();++col){
如果(*列=='!'){
vec.at(col-row->begin())='+';
}
}
}
}
int main()
{
//使用初始化二维向量“vect”
//价值观
向量向量{{'.','.','.},
{ '!', '.', '.' },
{ '!', '.', '!' } };
读取向量(vect);
}

非常感谢!将有问题的行修改为

row->at(col-row->begin())='+';
您正在寻址
行的索引
,而不是在原始
vec

另一方面,通过此更改,您的第一个程序可以简化为与许多不同的容器一起使用,而不仅仅是随机访问容器

p=find(开始(myints),结束(myints),“!”;
如果(p!=结束(myints)){
*p='+';
}
同样的道理也适用于违规行:

if(*col=='!')){
*col='+';
}

请在您的问题中更加具体,并填写编译器抛出的确切错误。这些程序旨在执行两种不同的操作。第一种是遍历向量并搜索“+”,第二种是假设遍历二维向量并将“10”而不是“!”。问问题时请更加具体这两个代码片段在不同的数据结构上做了不同的事情。请包含确切的错误消息。两个代码段都是用“业余”的方式来编写的。我不推荐C++ C++迭代器。简单的替换通常是用STL算法来完成的。(col-row->begin())
返回
vector
的变量引用,而不是
char&
。我想您需要做的是替换
vec.at(col-row->begin())
使用
*col
。非常感谢各位的评论!下次我将尝试更具体、更清楚地回答我的问题!哈哈,效果很好。非常感谢!:)祝你们一切顺利!
#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int main()
{
    vector<char> myints{ '.', '.','!','.' };
    vector<char>::iterator p;

    p = find(begin(myints), end(myints), '!');

    if (p != end(myints)) {
        myints.at(p - begin(myints)) = '+';
    }

    for (auto i : myints) {
        cout << i << " ";
    }

    return 0;
}
#include <iostream>
#include <vector>
#include <iterator>

using namespace std;


void readVector(vector< vector<char> >& vec)
{
    vector< vector<char> >::iterator row;
    vector<char>::iterator col;

    for (row = vec.begin(); row != vec.end(); ++row)
    {
        for (col = row->begin(); col != row->end(); ++col) {

            if (*col == '!') {
                vec.at(col - row->begin()) = '+';
            }
        }
    }
}

int main()
{
    // Initializing 2D vector "vect" with 
    // values 
    vector<vector<char> > vect{ { '.', '.', '.' },
                               { '!', '.', '.' },
                               { '!', '.', '!' } };

    readVector(vect);
}