一个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_博客园

[2] c++ cin返回值是多少_百度知道

[3] set和map的区别与联系

 

posted @ 2020-04-08 22:41  xkfx  阅读(153)  评论(0编辑  收藏  举报