如何修改向量成员的值?

How to modify a vector member's value?

本文关键字:成员 向量 何修改 修改      更新时间:2023-10-16

我试图使用向量svec来存储一些字符串值。但是,当在Dev C++中进行编译时,编译器报告了一个错误"运算符=不匹配"。为什么会出现此错误以及如何修复?谢谢

    #include<vector>
    #include<iostream>
    #include<string>
    using namespace std;
    int main() {
        vector<string> svec[100];
        for (int i = 0; i < 100; ++i) {
            svec[i] = "ABC";
        }
        return 0;
    }

[Error]与"operator="不匹配(操作数类型为"std::vector>"answers"const char[4]")

edit:问题出现在vector svec[100]中;在将其更改为矢量svec(100)之后,事情进展顺利;

edit2:我很好奇编译器是怎么看待下面的声明的。svec仍然被声明为向量吗?

vector<string> svec[100];

vector<string> svec[100];正在创建一个包含100个std::vector<std::string>元素的数组。这是有效的语法,尽管这样做很奇怪

因此,在其当前形式中,svec[i]指代std::vector<std::string>。将"ABC"分配给它是不可能的。这就是你出错的原因。

你想写的是vector<string> svec(100);。这是在调用一个vector构造函数,该构造函数将向量的大小预先设置为具有100个元素。

恰好std::vector重载了[]运算符,以便为您提供元素访问权限。(这是一个相当方便的纯数组模拟。)如果您进行更改,svec[i]将引用一个字符串,您可以按照当前的方式进行设置。

更改此语句

vector<string> svec[100];

vector<string> svec( 100 );

也就是说,您应该定义一个由100个元素组成的向量,而不是由100个向量组成的数组。:)

或者你可以简单地写

    vector<string> svec;
    // svec.reserve( 100 );
    for (int i = 0; i < 100; ++i) {
        svec.push_back( "ABC" );
    }

最简单的方法是下面的

int main() {
        vector<string> svec( 100, "ABC" );
        return 0;
    }