文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>整理下STL algorithms(2)

整理下STL algorithms(2)

时间:2011-04-12  来源:macula7

copy:

#include <algorithm>
template< class InputIterator, class OutputIterator >
OutputIterator copy( InputIterator first, InputIterator last, OutputIterator d_first );
该方法会将first到last之间的元素拷贝到d_first之中~~
相当于如下实现:
template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator d_first)
{
while (first != last) {
*d_first++ = *first++;
}
return d_first;
}
copy_backward:
是从后边拷贝~~
#include <algorithm>
#include
<iostream>

int main()
{
std::vector
<int> from_vector;
for (int i = 0; i < 10; i++) {
from_vector.push_back(i);
}

std::vector
<int> to_vector(15);

std::copy_backward(from_vector.begin(), from_vector.end(), to_vector.end());

std::cout
<< "to_vector contains: ";
for (unsigned int i = 0; i < to_vector.size(); i++) {
std
""cout << to_vector[i] << " ";
}

return 0;
}

to_vector contains:
0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
fill:
#include <algorithm>
 
template< class ForwardIterator, class T >
void fill( ForwardIterator first, ForwardIterator last, const T& value );
使用值value填充first和last之间的元素~~
fill_n:
template < class OutputIterator, class Size, class T >
  void fill_n ( OutputIterator first, Size n, const T& value );
填充n个value值~~~
transform:
template< class InputIterator, class OutputIterator, class UnaryOperation >
OutputIterator transform( InputIterator first1, InputIterator last1,
                          OutputIterator d_first, UnaryOperation unary_op );
 
template< class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation >
OutputIterator transform( InputIterator first1, InputIterator last1,
                          InputIterator first2, OutputIterator d_first, BinaryOperation binary_op );
将unary_op定义的操作用于first1和last1之间的元素,将结果存放在d_first开始的迭代器~~
first2是第二个序列的起始元素~
如下的字符串转大写方法~:
#include <string>
#include
<algorithm>
#include
<iostream>

int main()
{
std::
string s("hello");
std::transform(s.begin(), s.end(), s.begin(), (
int (*)(int))toupper);
std::cout
<< s;

return 0;
}
注意对函数的转换~~
generate:
template< class ForwardIterator, class Generator >
void generate( ForwardIterator first, ForwardIterator last, Generator g );
使用g产生的元素填充first到last之间的元素
可以使用如下代码产生随机序列~
#include <algorithm>
#include
<iostream>
#include
<cstdlib>

int main()
{
std::vector
<int> v(5);
std::generate(v.begin(), v.end(), std::rand);
// Using the C function rand()

std::cout
<< "v: ";
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
std::cout
<< v[i] << ' ';
}

return 0;
}

类似的是generate_n:
template< class OutputIterator, class Size, class Generator >
void generate_n( OutputIterator first, Size count, Generator g );
remove:
template < class ForwardIterator, class T >
  ForwardIterator remove ( ForwardIterator first, ForwardIterator last,
                           const T& value );
删除first和last之间值为value的元素~~
类似的有remove_if:
template< class ForwardIterator, class UnaryPredicate >
ForwardIterator remove_if( ForwardIterator first, ForwardIterator last, UnaryPredicate p );
还有remove_copy:
template< class InputIterator, class OutputIterator, class T >
OutputIterator remove_copy( InputIterator first,
                            InputIterator last,
                            OutputIterator d_first,
                            const T& value );
还有remove_copy_if replace:
template< class ForwardIterator, class T >
void replace( ForwardIterator first, ForwardIterator last,
              const T& old_value, const T& new_value );
替换操作,类似的有:replace_if 、replace_copy、replace_copy_if.
swap:
template <class T> void swap ( T& a, T& b );
交换a和b的值~~
template <class T> void swap ( T& a, T& b )
{
T c(a); a
=b; b=c;
}
类似的有swap_ranges:
template < class ForwardIterator1, class ForwardIterator2 >
  ForwardIterator2 swap_ranges ( ForwardIterator1 first1, ForwardIterator1 last1,
                                 ForwardIterator2 first2 );
 vector<int> first (5,10);        //  first: 10 10 10 10 10
vector<int> second (5,33); // second: 33 33 33 33 33
vector<int>::iterator it;

swap_ranges(first.begin()
+1, first.end()-1, second.begin());

结果为:first contains: 10 33 33 33 10 second contains: 10 10 10 33 33
iter_swap:
template <class ForwardIterator1, class ForwardIterator2>
  void iter_swap ( ForwardIterator1 a, ForwardIterator2 b );
交换两个迭代器的值~~
partition
template <class BidirectionalIterator, class Predicate>
  BidirectionalIterator partition ( BidirectionalIterator first,
                                    BidirectionalIterator last, Predicate pred );
将first和last之间的元素划分为两部分,前一部分是满足pred的,后一部分的不满足的。返回值是中间的分隔元素
该方法会打乱同类元素的顺序,而stable_partition能保持顺序~
reverse(反转):
template< class BidirectionalIterator >
void reverse( BidirectionalIterator first, BidirectionalIterator last );
reverse_copy:
template <class BidirectionalIterator, class OutputIterator>
  OutputIterator reverse_copy ( BidirectionalIterator first,
                                BidirectionalIterator last, OutputIterator result );
该方法不会改变原来的序列~~
rotate(旋转):
template <class ForwardIterator>
  void rotate ( ForwardIterator first, ForwardIterator middle,
                ForwardIterator last );
类似的有rotate_copy
random_shuffle(随机打乱):
template <class RandomAccessIterator>
  void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last );

template <class RandomAccessIterator, class RandomNumberGenerator>
  void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last,
                        RandomNumberGenerator& rand );
unique(去除重复元素):
template< class ForwardIterator >
ForwardIterator unique( ForwardIterator first, ForwardIterator last );
 
template< class ForwardIterator, class BinaryPredicate >
ForwardIterator unique( ForwardIterator first, ForwardIterator last, BinaryPredicate p );
相应的有unique_copy





相关阅读 更多 +
排行榜 更多 +
哥布林弹球b服手游下载

哥布林弹球b服手游下载

休闲益智 下载
小马样式盒游戏下载

小马样式盒游戏下载

休闲益智 下载
异变小镇中文版下载安装

异变小镇中文版下载安装

冒险解谜 下载