C++ code:动态内存
C++给我们提供了动态内存分配的new和delete操作。一般而论,new和delete操作多用在内存需求捉摸不定的场合。然而,需要处理的数据,如果变动范围很小,我们可以用STL中通用型的容器来做,大多数的情况都可以搞定。因为容器多能适应小量的变动需求。
1 动态内存之预留向量空间
例:清点单词数:
1 #include<iostream> 2 #include<fstream> 3 #include<sstream> 4 #include<vector> 5 #include<map> 6 using namespace std; 7 typedef multimap<int, int> Mmap; 8 9 int main() 10 { 11 ifstream in("abc.txt"); 12 vector<string> abc;
//abc.reserve(1100); 13 Mmap nums; 14 int n = 0; 15 for (string s; getline(in, s);) 16 { 17 istringstream sin(s); 18 int num = 0; 19 for (string t; sin >> t;num++) 20 if (num) 21 { 22 nums.insert(Mmap::value_type(num,n++)); 23 abc.push_back(s); 24 } 25 } 26 for (Mmap::iterator it = nums.begin(); it != nums.end(); ++it) 27 cout << abc[it->second] << endl; 28 }
2 动态内存之蛮做素数判断
例:求素数个数
1 #include<iostream> 2 #include<cmath> 3 4 using namespace std; 5 6 bool isPrime(int n) 7 { 8 int sqrtn = sqrt(n*1.0); 9 for (int i = 2; i <= sqrtn;++i) 10 if (n%i == 0) return false; 11 return true; 12 } 13 14 int main() 15 { 16 int num = 0; 17 for (int i = 2; i <= 100000000;++i) 18 if (isPrime(i)) 19 num++; 20 cout << num << endl; 21 }
3 动态内存之空间换时间
例:求素数个数筛法版
1 #include<iostream> 2 #include<bitset> 3 4 using namespace std; 5 6 int main() 7 { 8 bitset<100000000>* p = new bitset<100000000>; 9 p->set(); 10 11 for (int i = 2; i <= 10000; ++i) 12 if (p->test(i)) 13 for (int j = i*i; j < p->size(); j += i) 14 p->reset(j); 15 16 int num = 0; 17 18 for (int i = 2; i <= 100000000;++i) 19 if (p->test(i)) 20 num++; 21 cout << num << endl; 22 23 delete[] p; 24 }
天雨虽宽,不润无根之草。
佛门虽广,不渡无缘之人。