C++/Vector/vector find
Содержание
- 1 Binary search a vector
- 2 Demonstrating the generic find algorithm with a vector
- 3 Find the first of two values
- 4 Find the first pair of matching consecutive elements
- 5 Find the first subsequence
- 6 Find the first subsequence of two consecutive 8s
- 7 Find the last subsequence (which should be the same as the first)
- 8 Find the max value in the vector
- 9 Find the min value in the vector
- 10 Locate maximum element in a vector
- 11 Locate minimum element in a vector
- 12 Returns the positions of all values within a range
- 13 Search the vector for the elements present in the list
Binary search a vector
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
void print(int elem){
cout << elem << " ";
}
int main(int argc, char** argv)
{
vector<int> v1, v2, vectorMerged;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(2);
v2.push_back(3);
v2.push_back(4);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
vectorMerged.resize(v1.size() + v2.size());
merge(v1.begin(), v1.end(), v2.begin(),v2.end(), vectorMerged.begin());
if (binary_search(vectorMerged.begin(), vectorMerged.end(), 3)) {
cout << "That number is in the vector.\n";
} else {
cout << "That number is not in the vector\n";
}
return (0);
}
Demonstrating the generic find algorithm with a vector
#include <iostream>
#include <cassert>
#include <vector>
#include <algorithm> // For find
using namespace std;
int main()
{
char x[5] = {"a", "b", "c", "d", "f"};
vector<char> vector1(&x[0], &x[5]);
// Search for the first occurrence
vector<char>::iterator where = find(vector1.begin(), vector1.end(), "b");
cout << *where << endl;
return 0;
}
/*
b
*/
Find the first of two values
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
// Find the first of two values
int targets[] = {8, 9};
it = find_first_of(myVector.begin(), myVector.end(), targets,targets + 2);
if (it != myVector.end()) {
cout << "Found one of 8 or 9: " << *it << endl;
}
return (0);
}
Find the first pair of matching consecutive elements
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
// Find the first pair of matching consecutive elements
it = adjacent_find(myVector.begin(), myVector.end());
if (it != myVector.end()) {
cout << "Found two consecutive equal elements of value " << *it << endl;
}
return (0);
}
Find the first subsequence
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
// Find the first subsequence
int sub[] = {8, 3};
it = search(myVector.begin(), myVector.end(), sub, sub + 2);
if (it != myVector.end()) {
cout << "Found subsequence 8, 3 at position " << it - myVector.begin()
<< endl;
}
return (0);
}
Find the first subsequence of two consecutive 8s
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
it = search_n(myVector.begin(), myVector.end(), 2, 8);
if (it != myVector.end()) {
cout << "Found two consecutive 8s starting at position "
<< it - myVector.begin() << endl;
}
return (0);
}
Find the last subsequence (which should be the same as the first)
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
int sub[] = {8, 3};
it2 = find_end(myVector.begin(), myVector.end(), sub, sub + 2);
if (it != it2) {
cout << "Error: search and find_end found different subsequences "
<< " even though there is only one match.\n";
}
return (0);
}
Find the max value in the vector
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
// Find the min and max elements in the vector
it2 = max_element(myVector.begin(), myVector.end());
cout << " the max is " << *it2 << endl;
return (0);
}
Find the min value in the vector
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
int elems[] = {5, 6, 9, 8, 8, 3};
vector<int> myVector(elems, elems + 6);
vector<int>::const_iterator it, it2;
// Find the min and max elements in the vector
it = min_element(myVector.begin(), myVector.end());
cout << "The min is " << *it << endl;
return (0);
}
Locate maximum element in a vector
#include <iostream>
using std::cout;
using std::endl;
#include <algorithm>
#include <numeric>
#include <vector>
#include <iterator>
int main()
{
std::ostream_iterator< int > output( cout, " " );
int a2[ 10 ] = { 100, 2, 8, 1, 50, 3, 8, 8, 9, 10 };
std::vector< int > v2( a2, a2 + 10 ); // copy of a2
cout << "\n\nVector v2 contains: ";
std::copy( v2.begin(), v2.end(), output );
// locate maximum element in v2
cout << "\nMaximum element in Vector v2 is: "
<< *( std::max_element( v2.begin(), v2.end() ) );
cout << endl;
return 0;
}
/*
Vector v2 contains: 100 2 8 1 50 3 8 8 9 10
Maximum element in Vector v2 is: 100
*/
Locate minimum element in a vector
#include <iostream>
using std::cout;
using std::endl;
#include <algorithm>
#include <numeric>
#include <vector>
#include <iterator>
int main()
{
std::ostream_iterator< int > output( cout, " " );
int a2[ 10 ] = { 100, 2, 8, 1, 50, 3, 8, 8, 9, 10 };
std::vector< int > v2( a2, a2 + 10 ); // copy of a2
cout << "\n\nVector v2 contains: ";
std::copy( v2.begin(), v2.end(), output );
// locate minimum element in v2
cout << "\n\nMinimum element in Vector v2 is: "
<< *( std::min_element( v2.begin(), v2.end() ) );
cout << endl;
return 0;
}
/*
Vector v2 contains: 100 2 8 1 50 3 8 8 9 10
Minimum element in Vector v2 is: 1
*/
Returns the positions of all values within a range
#include <iostream>
#include <vector>
using namespace std;
vector<int> find_all_between(vector<double> v, double low, double high)
{
vector<int> pos;
for (int i = 0; i < v.size(); i++)
{
if (low <= v[i] && v[i] <= high)
pos.push_back(i);
}
return pos;
}
int main()
{
vector<double> salaries(5);
salaries[0] = 3.0;
salaries[1] = 6.0;
salaries[2] = 4.0;
salaries[3] = 7.0;
salaries[4] = 5.0;
vector<int> matches = find_all_between(salaries, 4.0, 6.0);
for (int j = 0; j < matches.size(); j++)
cout << salaries[matches[j]] << "\n";
return 0;
}
Search the vector for the elements present in the list
#include <algorithm>
#include <vector>
#include <list>
#include <iostream>
using namespace std;
int main ()
{
vector <int> v;
for (int nNum = -9; nNum < 10; ++ nNum)
v.push_back (nNum);
v.push_back (9);
v.push_back (9);
list <int> l;
for (int nNum = -4; nNum < 5; ++ nNum)
l.push_back (nNum);
vector <int>::iterator vl;
vl = search ( v.begin () // Start of range
, v.end () // End of range to search in
, l.begin () // Start of range to search for
, l.end () ); // End of range to search for
if (vl != v.end ()){
cout << distance (v.begin (), vl);
cout << endl << endl;
}
return 0;
}