让,
#include <vector>
vector<int> v {1, 2, 3, -1, -2, -3};
如果向量按升序或降序排序,则可以找到复杂度为O(1)的向量。
对于升序向量,第一个元素是最小元素,可以通过v [0](基于0的索引)获得,最后一个元素是最大元素,可以通过v [sizeOfVector-1]获得。
如果向量按降序排序,则最后一个元素是最小元素,您可以通过v [sizeOfVector-1]获得它,而第一个元素是最大元素,您可以通过v [0]获得它。
如果不对向量进行排序,则必须遍历向量以获得最小/最大元素。在这种情况下,时间复杂度为O(n),这里n是向量的大小。
int smallest_element = v[0]; //let, first element is the smallest one
int largest_element = v[0]; //also let, first element is the biggest one
for(int i = 1; i < v.size(); i++) //start iterating from the second element
{
if(v[i] < smallest_element)
{
smallest_element = v[i];
}
if(v[i] > largest_element)
{
largest_element = v[i];
}
}
您可以使用迭代器,
for (vector<int>:: iterator it = v.begin(); it != v.end(); it++)
{
if(*it < smallest_element) //used *it (with asterisk), because it's an iterator
{
smallest_element = *it;
}
if(*it > largest_element)
{
largest_element = *it;
}
}
您可以在输入部分进行计算(当您必须从给定向量中找到最小或最大元素时)
int smallest_element, largest_element, value;
vector <int> v;
int n;//n is the number of elements to enter
cin >> n;
for(int i = 0;i<n;i++)
{
cin>>value;
if(i==0)
{
smallest_element= value; //smallest_element=v[0];
largest_element= value; //also, largest_element = v[0]
}
if(value<smallest_element and i>0)
{
smallest_element = value;
}
if(value>largest_element and i>0)
{
largest_element = value;
}
v.push_back(value);
}
您还可以通过内置函数获得最小/最大元素
#include<algorithm>
int smallest_element = *min_element(v.begin(),v.end());
int largest_element = *max_element(v.begin(),v.end());
使用此功能,您可以获取任何范围的最小/最大元素。如,
vector<int> v {1,2,3,-1,-2,-3};
cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements
cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements
cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive)
cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive)
我在min_element()/ max_element()函数之前使用了星号(*)。因为他们两个都返回迭代器。所有代码均使用c ++。
cloud
不是STL容器,而是int[10]
。基本上cloud
没有成员.begin()
。除非您只做一件事,否则可能想获得一本基本的C ++书籍。