如何修改向量成员的值?

时间:2014-10-17 15:02:38

标签: c++ vector operators

我试图使用矢量svec来存储一些字符串值。但是当在Dev C ++ 5.6.1中进行编译时,编译器报告错误为"对于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;
    }

[错误]不匹配&#39;运营商=&#39; (操作数类型是&#39; std :: vector&gt;&#39;和&#39; const char [4]&#39;)

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

edit2:我很好奇编译器对以下声明的看法。 svec仍被宣布为矢量吗?

vector<string> svec[100];

2 个答案:

答案 0 :(得分:7)

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

因此,svec[i]以当前形式引用std::vector<std::string>。分配&#34; ABC&#34;这是不可能的。这就是你收到错误的原因。

您的意思是vector<string> svec(100);。这是调用其中一个vector 构造函数,它将向量预先调整为100个元素。

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

答案 1 :(得分:2)

更改此声明

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