. , . , , , afor loop - .
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
class Something;
struct SomethingIter {
SomethingIter(Something* p) : parent(p) {};
SomethingIter& operator++();
int& operator* ();
private:
Something* parent;
};
class Something {
public:
Something() : minset(false), first(true), min(0) { }
SomethingIter storage() {
SomethingIter ret(this);
return ret;
}
void set() {
if (first) { first = false; }
else if (!minset || s < min) {
min = s;
minset = true;
}
}
int& value() { return s; }
int getMin() const { return min; }
private:
bool first;
bool minset;
int min;
int s;
};
SomethingIter& SomethingIter::operator++() {
parent->set();
return *this;
}
int& SomethingIter::operator* () {
return parent->value();
}
int main() {
Something s;
vector<int> values{ 0, 2, 5 };
adjacent_difference(values.begin(), values.end(), s.storage());
cout << "min: " << s.getMin() << endl;
return 0;
}
?
:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int minDiff(const vector<int>& values) {
size_t len = values.size();
if (len < 2) { throw runtime_error("Invalid vector"); }
int mindiff = values[1] - values[0];
for (size_t i = 2; i<len; ++i) {
int diff = values[i] - values[i-1];
if (diff < mindiff) { mindiff = diff; }
}
return mindiff;
}
int main() {
vector<int> values{0, 2, 5};
cout << minDiff(values) << endl;
return 0;
}
:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
vector<string> A{"AB", "BA", "AAA"};
unsigned int sum = 0;
for_each (A.begin(), A.end(), [&sum](const string& s) {
if (s[0] == 'A') { sum += s.length(); } });
cout << sum << endl;
return 0;
}