前言:本认为这只是一本教授C++基本语法的小书,仔细翻看过一遍,里面涵盖了C++大部分常用的知识,有些程序和建议都非常精妙,贝海拾遗,恐以后忘记,故书写以记之。
1.rand()函数
下面是随机产生色子随机数的例子:
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(static_cast<unsigned int>(time(0)));//为随机数生成器设置种子 int randomNumber = rand(); int num = (randomNumber % 6) + 1;//die的范围为1~6 cout << "你摇的色子的数字是:" << num << endl; return 0; }rand函数的使用:
下面的代码为随机数生成器确定种子。
srand(static_cast<unsigned int>(time(0)));//为随机数生成器设置种子
它基于当前日期和事件为生成器确定种子。
srand()函数为生成器确定种子,它接收一个unsigned int型的值作为种子。
2.将字符串乱序
法I:对字符串取地址
//实现string单词乱序 for (int i=0; i<length; ++i) { int index1 = (rand() % length);//生成随机值 int index2 = (rand() % length); char temp = str[index1]; str[index1] = str[index2]; str[index2] = temp; }程序生成string对象中的两个随机位置,并交换两个位置的字符。交换操作的次数等于单词的长度。
法II:random_shuffle()
vector<string> words; // collection of possible words to guess words.push_back("GUESS"); words.push_back("HANGMAN"); words.push_back("DIFFICULT"); srand(static_cast<unsigned int>(time(0))); random_shuffle(words.begin(), words.end());//shuffle:洗牌,随手放,搬移random_shuffle用于打乱向量或字符串中的顺序。详细内容参见定义:
另外,random_shuffle还可以处理其它类型数组:
int n[4] = {0,1,2,3}; random_shuffle(n, n+4);
动态分配内存时较好的编程方法:
int* pHeap = new int; *pHeap = 10; int* pHeap2 = new int[20]; delete pHeap; delete pHeap2; pHeap = 0; pHeap2 = 0;
因为需要释放掉不再使用的已经分配过的内存,所以一个较好的准则但是每个new都应当有一个响应的delete。实际上,有些程序员尽可能编写new语句之后就编写delete语句,这样就不会忘记释放内存。
int* pHeap = new int; *pHeap = 10; int* pHeap2 = new int[20]; delete pHeap; delete pHeap2;重点:上面的两条语句释放掉堆中的内存,但是他们没有直接影响到局部变量pHeap和pHeap2。这造成一个潜在的问题,因为pHeap和pHeap2现在指向已经返回给堆的内存,即它们所指向计算机可能在任意某个时刻以某种方式使用的内存。像这样的指针成为野指针,它们相当危险,绝不应当对它们解引用。
一种处理野指针的方法是将它们赋值为0.使得它们不再指向不应当使用的内存。
pHeap = 0; pHeap2 = 0;