一个FLAG #11# Andy's First Dictionary
题&例子
vector的拷贝
#include <cstdio> #include <string> #include <vector> #include <iostream> using namespace std; void print(string lable, vector<int> &v) { cout << lable << endl; for (int i = 0; i != 3; ++i) { printf("%d ", v[i]); } printf("\n"); } int main() { // 拷贝vector, 不同于java里面的传递对象! vector<int> ivec1; // c++98没法用方便的初始化方式 ivec1.push_back(1); ivec1.push_back(2); ivec1.push_back(3); print("ivec1:", ivec1); vector<int> ivec2(ivec1); ivec2[1] = 100000; print("改变ivec2:", ivec2); print("ivec1不变:", ivec1); vector<int> ivec3 = ivec1; ivec3[1] = 2222222; print("改变ivec3:", ivec3); print("ivec1不变:", ivec1); return 0; } /* Output ivec1: 1 2 3 改变ivec2: 1 100000 3 ivec1不变: 1 2 3 改变ivec3: 1 2222222 3 ivec1不变: 1 2 3 */
例题5-3 安迪的第一个字典。[1]
补充set和map的知识,它们之间的区别与联系[3]:
- set = 键
- map = 键 + 值
两者的元素都会基于键从小到大自动排序。
#include <iostream> #include <string> #include <set> #include <sstream> using namespace std; set<string> dict; int main() { string s, buf; while (cin >> s) { // s里面存的是不规则的字符串,例如 Left." 又 例如Road.you // 是包含标点的 for (int i = 0; i != s.length(); ++i) { if (isalpha(s[i])) { // isalpha判断是否是字母,非字母返回零 s[i] = tolower(s[i]); } else { s[i] = ' '; } } // 经改造后就变成 left 以及 road you // 包含空格,并且可能一个s对应多个单词 stringstream ss(s); while (ss >> buf) { // 从字符串流里逐个单词读入到buf中 dict.insert(buf); // 插入到集合里 } } for (set<string>::iterator it = dict.begin(); it != dict.end(); ++it) { cout << *it << "\n"; } return 0; }
参考
[1] 安迪的第一个字典 Andy's First Dictionary, UVa 10815_博客园
[3] set和map的区别与联系