【问题标题】:How to modify a vector member's value?如何修改向量成员的值?
【发布时间】:2014-12-13 04:59:09
【问题描述】:

我试图使用向量 svec 来存储一些字符串值。但是在Dev C++ 5.6.1 编译时,编译器报错“no match for operator=”。为什么会出现此错误以及如何解决?谢谢。

    #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;
    }

[错误] 'operator=' 不匹配(操作数类型为 'std::vector >' 和 'const char [4]')

编辑:问题出在向量 svec[100];改成vector svec(100)后一切顺利;

edit2:我很好奇编译器如何看待以下声明。 svec 是否仍被声明为向量?

vector<string> svec[100];

【问题讨论】:

  • svec 是一个向量数组。你需要一个大小为 100 的向量,vector&lt;string&gt; svec(100);
  • 我知道这可能只是一个示例,但提示:您可以创建一个具有相同元素的向量,如下所示:vector&lt;string&gt; svec(100, "ABC");
  • 是的,问题在于声明。谢谢。

标签: c++ vector operators


【解决方案1】:

更改此语句

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;
    }

【讨论】:

    【解决方案2】:

    vector&lt;string&gt; svec[100]; 正在创建一个包含 100 个 std::vector&lt;std::string&gt; 元素的数组。这是有效的语法,虽然它是一件相当奇怪的事情。

    在其当前形式中,svec[i] 因此指的是std::vector&lt;std::string&gt;。不可能将“ABC”分配给它。这就是您收到错误的原因。

    你要写的是vector&lt;string&gt; svec(100);。这正在调用 vector 构造函数 之一,它将向量预先设置为具有 100 个元素。

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

    【讨论】:

    • 很高兴。相当冗长的解释,但确实解释了为什么你在编译中“相当晚”得到错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2011-11-15
    • 2011-09-10
    • 1970-01-01
    相关资源
    最近更新 更多