我一直在尝试一些不同的方法,但我无法弄清楚。我得到的声明是:
const std::vector<std::string>&,
我一直在尝试这样做:
gradeReported.push_back(firstEntry);
我一直收到错误。我很确定它与向量的const性质有关。帮助将不胜感激!
答案 0 :(得分:6)
你没有。如果是const
,则无法修改。您需要复制或通过非const引用进行复制。
答案 1 :(得分:4)
你不能将项目放入const向量中,向量状态是它所持有的项目,向向量中添加项目会修改该状态。
如果要附加到矢量,则必须使用非常量参考。
void f(std::vector<int>& v)
{
v.push_back(4);
}
答案 2 :(得分:2)
如果您有const
向量,则表示您只能读取该向量中的元素
当您使用const
限定符时,相同的规则适用于任何其他类型的向量。
为了能够修改它,你要么必须复制原始载体,要么采用非const引用。
答案 3 :(得分:1)
const向量的要点是你无法修改它。向其添加元素将是一种修改,因此违反了其常量。这就是为什么你不能这样做的原因。这是设计的。
答案 4 :(得分:1)
你不应该能够改变它,这就是const的重点。它主要用于将参数传递给函数/方法,并确保它不会被修改。
如果您确实需要更改它,有两种选择:
const std::vector<std::string>& foo;
std::vector<std::string> bar(foo);
我强烈建议不要使用它,但它可能是一个选项。
假设字符串向量在作为参数传递给方法或函数之前被赋予const保护,并且基础类型实际上不是const
,那么可以执行以下操作:
typedef std::vector<std::string> string_vector;
void f(const string_vector& foo) {
const string_vector& foo;
const_cast<string_vector>(foo).push(firstEntry);
}
int main() {
string_vector foo();
f(foo);
}
答案 5 :(得分:-1)
您必须在声明中删除const,或者如果不可能使用
const_cast<std::vector<std::string>& >(gradeReported).push_back(firstEntry);