And*_*ndy 1 c++ oop reference vector c++11
我最近编写了一个非常简单的代码class,它负责查找a中的min和max值std::vector,即使我将集合作为a const reference传递给class'构造函数然后更改向量(即将元素推入其中)或者从外面移除一个),内部的向量class保持不变.
#include <vector>
#include <algorithm>
class MinMaxFinder
{
public:
MinMaxFinder(const std::vector<int>& numbers) : numbers(numbers)
{
}
const int Min() const
{
this->findMinAndMax();
return this->min;
}
const int Max() const
{
this->findMinAndMax();
return this->max;
}
protected:
std::vector<int> numbers;
int min;
int max;
void findMinAndMax()
{
// std::minmax_element call to find min and max values
}
};
Run Code Online (Sandbox Code Playgroud)
我认为传递引用的点是为了不复制大对象,但是我的代码现在的工作方式似乎是复制集合.
#include <vector>
#include <iostream>
#include "MinMaxFinder.h"
int main(int argc, char* argv[])
{
std::vector<int> v{ 1, -6, 12, 158, -326 };
MinMaxFinder mmf(v);
v.push_back(-9999999);
v.push_back(9999999);
auto min = mmf.Min();
auto max = mmf.Max();
}
Run Code Online (Sandbox Code Playgroud)
的价值min将是-326,价值max将是158,即使是很清楚,该值9999999远远大于158.
我设法解决通过改变私有成员的定义这种行为numbers来std::vector<int>& numbers,但它是正确的解决方案?
仍然,为什么内部集合的状态仍然没有变化,它是否不会违反const ref的传递定义?
std::vector<int> numbers;应该const std::vector<int>& numbers;这样你引用一个对象而不复制它或具有更改它的能力.
但是说真的,这堂课有什么意义呢?巨大的矫枉过正!只是使用std::min_element和std::max_element或std::minmax_element..
auto minimun = std::min_element(numbers.begin(),numbers.end());
Run Code Online (Sandbox Code Playgroud)