gpt4 book ai didi

c++ - STL 容器中的 Const 函数

转载 作者:行者123 更新时间:2023-11-27 23:27:15 25 4
gpt4 key购买 nike

我在使用 C++ 中的 STL 容器时遇到问题

功能一;

void addStudent(const Student &s){                       
set<GradeColumn>::iterator itr;

for(itr = gradeColumns.begin(); itr != gradeColumns.end(); itr++){
itr->addStudent(s, DID_NOT_COMPLETE);
}
}

功能二:

void addStudent(const Student &s,  int grade) const {
column.insert(pair<Student, int>(s, grade));
}

好的,所以在函数 1 中我使用了 addStudent,但是编译器会给我一个错误,除非我将 addStudent 声明为一个 const 函数(错误是“对象具有与成员函数不兼容的类型限定符”)。

但是如果我确实将 addStudent 声明为 const 函数,那么 column.insert(...) 会给我下一个错误:“没有重载函数的实例与参数列表和对象 9 匹配,该对象具有阻止匹配的类型限定符)".

有什么办法可以解决吗?我错过了什么吗?

谢谢!

最佳答案

std::set 的键总是不变的。这是容器的要求,因为元素是按键值排序的,如果键是可变的,则容器无法保证其不变量得到维护。

如果 GradeColumn 上的关系运算符独立于您需要在 insert() 成员函数中访问的内容,那么您可以声明这些成员对象 可变的,这样即使键对象本身是常量,您也可以修改它们。

关于c++ - STL 容器中的 Const 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com