10月23日操作记录:
1、c ++ 中stack声明和vector声明方式一致;
2、stack的top()方法只能获得栈顶元素,而不能删除,删除需用pop();
3、c ++ 中map的声明和java一样,只不过是小写,包含在头文件#include <map>中;
4、c ++ 中map没有put方法,插入元素当成数组插入,即map[index] = value,或者使用insert进行插入:
insert(std::pair<int, string>(key, value))
5、c ++ 中map元素的访问当成数组来访问,即value = map[index];
6、c ++ 中map通过value获得key的方式,提供函数如下;
#incldue <map>
vector<int> getKeyByValue(string s) {
? ?vector<int> keyVector;
for (std::map<int, string>::iterator it = map.begin(); it != stringMap.end(); it ++) {
? if (it -> second == value) {
? ? ? ? ? ?keyVector.push_back(it -> first);
? }
}
? ?return keyVector;
}
这里注意返回的是一个key的vector,因为同一个value可能拥有多个key;但key是唯一的,当insert进一个已包含的key键值对时,本次insert是无效的;
7、c ++ 中string无需通过stycmp进行比对,可通过string._Equal()进行比对;
8、c ++ 中char类型可通过字符流stringstream转换为string, 提供函数如下:
#include <sstream>
string charToString(char c) {
? ?string s;
? ?stringstream transform;
? ?transform << c;
? ?s = transform.str();
? ?return s;
}
9、如何用switch对string类型进行选择?
switch只支持对常量进行选择,即基本数据类型,为了保持代码优雅,避免大量if、else语句的出现,可通过map或enum对需要选择的引用类型进行管理:
#include <map>
map<int, string> switchMap;
void input(int n, vector<string> stringVector) {
? ?for (int i = 0; i < n; i ++) {
? ? ? ?string s;
? ? ? ?getline(cin, s);
? ? ? ?stringVector.push_back(s);
? ? ? ?switchMap.insert(std::pair<int, string>(i, s));
? }
}
?
vector<int> getKeyByValue(string s) {
? ?vector<int> keyVector;
for (std::map<int, string>::iterator it = map.begin(); it != stringMap.end(); it ++) {
? if (it -> second == value) {
? ? ? ? ? ?keyVector.push_back(it -> first);
? }
}
? ?return keyVector;
}
?
void operateSwitch(string s) {
? ?vector<int> keyVector = getKeyByValue(s);
? ?for (int i = 0; i < keyVector.size(); i ++) {
? ? ? ?switch(keyVector[i]) {
? ? ? ? ? ?case 1 : cout << switchMap[keyVector[i]] << endl; break;
? ? ? ? ? ?case 2 : cout << switchMap[keyVector[i]] << endl; break;
? ? ? ? ? ?case 3 : ......
? ? ? ? ? ......
? ? ? }
? }
}
这里只是随手写个demo,只是为了传达这种思想, enum同样可以做到;
同样的方法也可以用到 JAVA 中
|