如何修改向量成员的值?
How to modify a vector member's value?
我试图使用向量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;
}
相关文章:
- C++:从其他类访问结构的私有成员向量
- 访问类成员向量最后一项的正确方法
- 将字符串推送到私有成员向量
- 访问其他类中多个对象的私有成员向量
- 如何在类的构造函数中定义成员向量的大小
- 如何对类成员向量进行排序
- 从向量中擦除元素是否也会擦除元素中存在的所有成员向量
- 尝试从成员函数推送时不维护元素的成员向量
- C++ |无法将项添加到类成员向量
- 如何创建过滤流的成员向量
- 使用大型数据集初始化类成员向量的最有效方法
- 将C 成员向量包裹为Python命令
- 尝试保存到成员向量的连接-一次只保存一个
- 类成员向量上的迭代器未正确取消引用
- 如何在c++11中返回类成员向量
- 初始化构造函数C++中的成员向量
- 将类成员向量的内容复制到另一个向量中,然后将其交换回
- 推送到成员向量时的隔离错误
- 在堆上创建多态对象的数据成员向量
- 将此指针推回专用静态成员向量