C++ 一条代码打印vector内容以及random_shuffle函数
2012-03-04 16:13
288 查看
#include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; int main (int argc, char *argv[]) { int n = 10; vector<int> v; //append integers 0 to n-1 to v for (int i = 0; i < n; ++i) { v.push_back(i); } //random shuffle the values of v random_shuffle (v.begin(), v.end()); //print all values of v to screen copy (v.begin(), v.end(), ostream_iterator<int> (cout, "\n")); return 0; }运行结果:
8
1
9
2
0
5
7
3
4
6
Press any key to continue . . .
本实例简单演示了vector的使用,实际上该演示代码同时包含了迭代器(iterator)技术,如v.begin()和v.end(),
他们分别指示vector向量的初始化和末尾指针,同时该代码还采用了STL技术中的算法技术,通过STL算法函数
random_shuffle吧容器类的元素顺序捣乱,并通过算法函数copy实现数据的输出。
有关以上程序的运行过程如下图所示,假设总共有100个元素,以上代码首先定义了一个空的vector对象,然后
赋值如第二步所示,第三步显示了赋值完毕后向量的存储实例,通过random_shuffle函数把容器类的元素顺序捣乱
后向量中存储的元素如第四步所示:
关于random_shuffle函数详解如下:
一下内容出自:http://www.cplusplus.com/reference/algorithm/random_shuffle/
1.其函数原型如下:
template <class RandomAccessIterator> void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last ); template <class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator& rand );
该函数的功能是重新随机的排列first到last的间的所有元素。
Rearranges the elements in the range [first,last) randomly. The function swaps the value of each element with that of some other randomly chosen element. When provided, the function rand chooses which element. The behavior of this function template is equivalent to: template <class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle ( RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator& rand ) { iterator_traits<RandomAccessIterator>::difference_type i, n; n = (last-first); for (i=n-1; i>0; --i) swap (first[i],first[rand(i+1)]); }
Parameters
first, last
Forward iterators to the initial and final positions of the sequence to be shuffled. The range used is [first,last), which contains all the elements between first andlast, including the element pointed by first but not the element pointed by last.
rand
Pointer to unary function taking one argument and returning a value, both of the appropriate difference type (generally ptrdiff_t). The function shall return a value between zero and its argument (lower than this).
Return value
none
Example
// random_shuffle example #include <iostream> #include <algorithm> #include <functional> #include <vector> #include <ctime> #include <cstdlib> using namespace std; // random generator function: ptrdiff_t myrandom (ptrdiff_t i) { return rand()%i;} // pointer object to it: ptrdiff_t (*p_myrandom)(ptrdiff_t) = myrandom; int main () { srand ( unsigned ( time (NULL) ) ); vector<int> myvector; vector<int>::iterator it; // set some values: for (int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9 // using built-in random generator: random_shuffle ( myvector.begin(), myvector.end() ); // using myrandom: random_shuffle ( myvector.begin(), myvector.end(), p_myrandom); // print out content: cout << "myvector contains:"; for (it=myvector.begin(); it!=myvector.end(); ++it) cout << " " << *it; cout << endl; return 0; }
A possible output:
myvector contains: 3 4 1 6 8 9 2 7 5
others:
ptrdiff_t
Result of pointer subtraction
This is the type returned by the subtraction operation between two pointers. This is a signed integral type, and as such can be casted to compatible fundamental data types.
A subtraction of two pointers is only granted to have a valid defined value for pointers to elements of the same array (or for the element just past the last in the array).
For other values, the behavior depends on the system characteristics and compiler implementation.
相关文章推荐
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
- MyBatis代码实例系列-02:MyBatis用log4j打印SQL以及MyBatis的事务控制
- c++ 如何实现vector内容的复制
- 链表的添加、查找删除、反向打印c++代码
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- js打印WEB页面内容代码大全
- 双链表的建立,测长度,打印,插入c++代码实例及运行结果
- 队列的入队,出队,测长度,打印c++代码
- C++如何将vector<string> str里的内容全部写入TXT
- redhat 64位下安装gcc-c++ 以及编译32位代码
- 在VS2008中使用C#代码打印 RichTextBox 控件的内容[方法采自微软支持][Part 1]
- 如何在cocos2d c++代码中调用lua以及探究
- jquery动态增加text元素以及删除文本内容实例代码
- javascript,com组件打印,以及纯script代码实现局部页面打印
- 打印vector内容
- C++面试题:看代码找错—vector容器的使用
- 【蛮力法】冒泡排序以及C++代码实现
- C++教你用代码实现把拷贝的内容放到剪贴板。
- 启动多线程以及延迟输出内容代码
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码