如何从类外部修改向量
How can I modify a vector from outside the class
如何访问类外的私有向量?我想修改此对象的参数。
我尝试制作 getter 并通过引用返回矢量,但是当我尝试更改主要函数中矢量中包含的对象的参数时,矢量中的更改不会保存。
class Restaurant
{
std::vector <Waiter> waiters_vector_;
public:
inline std::vector<Waiter> &GetWaitersVector() { return waiters_vector_; }
void Restaurant::AddWaiter(Waiter tmp)
{
waiters_vector_.push_back(tmp);
}
Restaurant();
~Restaurant();
};
class Waiter
{
int current_group_id_=0;
public:
int GetCurrentGroupId()
{
return current_group_id_;
}
void SetCurrentGroupId(int tmp)
{
current_group_id_ = tmp;
}
Waiter();
~Waiter();
};
int main()
{
Restaurant restaurant1;
Waiter w1, w2, w3;
restaurant1.AddWaiter(w1);
restaurant1.AddWaiter(w2);
restaurant1.AddWaiter(w3);
for (Waiter element : restaurant1.GetWaitersVector())
{
element.SetCurrentGroupId(123);
}
for (Waiter element : restaurant1.GetWaitersVector())
{
std::cout << element.GetCurrentGroupId() << std::endl;
}
}
结果:000
你的两个for
循环都在制作副本
for (Waiter element : restaurant1.GetWaitersVector())
要修改对实际对象的引用
for (Waiter& element : restaurant1.GetWaitersVector())
for (Waiter element : restaurant1.GetWaitersVector())
使用向量的副本进行操作。
如果要对引用使用进行操作
for (auto& element : restaurant1.GetWaitersVector())
// ^^^^^
相反。
但除了上面提到的之外,暴露你的实习载体是一个糟糕的设计理念。你应该有一个 getter 可以
inline const std::vector<Waiter> &GetWaitersVector() const { return waiters_vector_; }
从而强制访问它的客户端使用类的特定函数(如AddWaiter()
(来修改它。
如何访问课外的私人向量?我想修改此对象的参数。
你没有。或者更确切地说,您需要决定:服务员的载体是私人的,还是不是?是使用此类的代码不应注意的实现细节吗?如果没有,你真的希望能够在外面按原样操纵它吗?或者,也许您想使用 PIMPL 习惯用法来提供一个返回晦涩类的.waiters()
方法,该方法包括 add(...)
、'remove(...( 等?
这些是您需要做出的设计决策。
相关文章:
- 选择和修改嵌套向量中的条目的最佳实践
- 如何修改 lambda 内部字符串的向量
- 我可以使用 std::vector::swap 来修改共享向量吗?
- 修改向量中的字符串?(不使用循环)
- 有没有一种优雅的方法可以使用向量修改器并获得新的向量,而不是更改原始向量
- C++11-在结构向量中修改结构的成员
- 使用迭代器遍历向量并修改内容
- 在C 向量中修改对象值的麻烦
- 如何在用户定义类型的向量上使用 vector::p ush_back() 来仅修改一个对象?
- 无法修改从向量<shared_ptr static_pointer_cast派生<Base>>
- 修改另一个类的向量成员时出错
- 如何从类外部修改向量
- 当push_back到向量中时,我是否需要复制构造函数来修改静态成员
- 修改向量后引用 vector.back() 的奇怪行为
- 修改向量的元素(按值、按引用) 函数C++
- 如何修改向量成员的值?
- 使用指针修改向量
- 如何修改向量上的嵌套结构
- 如何修改向量内的元素
- 从另一个线程修改向量中指针的数据是否安全