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 }

动态内存之蛮做素数判断

例:求素数个数

 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 }

扫描二维码关注公众号,回复: 1038792 查看本文章

动态内存之空间换时间

例:求素数个数筛法版

 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 }

猜你喜欢

转载自www.cnblogs.com/ariel-dreamland/p/9092217.html