c++ primer 第五版第十一章
2021-07-12 10:07
标签:substr string second 速度 cout orm 行号 重新定义 初始 11.01 描述map和vector的不同。 vector是顺序容器,只能存放单一类型的数据。 map是关联的容器,存放一对key-value,这两个数据可以是不同类型。 11.02 分别给出最适合使用list、vector、deque、map以及set的例子。 11.03 编写你自己的单词计数程序。 11.04 扩展你的程序,忽略大小写和标点。例如,“example.”、"example,"和"Example"应该递增相同的计数器。 11.05 解释map和set的区别。你如何选择使用哪个? map必须指明关键字类型和值类型 set之存放关键字,没有值。使用哪种容器要根据使用场景进行选择。 11.06 解释set和list的区别。你如何选择使用哪个? set是关联容器,进行查找、修改操作效率高 list是顺序容器,插入删除等操作效率低。 11.07 定义一个map,关键字是家庭的姓,值是一个vector,保存家中孩子们的名。编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。 11.08 编写一个程序,在一个vector而不是一个set中保存不重复的单词。使用set的优点是什么? set的查找速度更快。 11.09 定义一个map,将单词与一个行号的list关联,list中保存的是单词所出现的行号。 11.10 可以定义一个vector 11.11 不使用decltype重新定义bookstore。 11.12 编写程序,读入string和int的序列,将每个string和int存入一个pair中,pair保存在一个vector中。 11.13 在上一题的程序中,至少有三种创建pair的方法。编写此程序的三个版本,分别采用不同的方法创建pair。解释你认为哪种形式最易于编写和理解,为什么? 11.14 扩展11.2.1节练习中编写的孩子姓到名的map,添加一个pair的vector,保存孩子的名和生日。 11.15 对一个int到vector 对于map mapped_type是vector key_type是int类型。 value_type是pair 11.16 使用一个map迭代器编写一个表达式,将一个值赋予一个元素。 11.17 假定c是一个string的multiset,v是一个string的vector,解释下面的调用。指出每个调用是否合法: 11.18 写出382页循环中map_it的类型,不要使用auto或decltype。 11.19 定义一个变量,通过11.2.2节中的名为bookstore的multiset调用begin()来初始化这个变量。写出变量的类型,不要使用auto或decltype。 11.20 重写11.1节练习的单词计数程序,使用insert代替下标操作。你认为哪个程序更容易编写和阅读?解释原因。 11.21 假定word_count是一个string到size_t的map,word是一个string,解释下面循环的作用。 向word_count中插入元素,如果word已存在,则解引用first迭代器,取值的部分++。 如果word不存在,则插入(word,0),载解引用first迭代器,取值的部分++。 11.22 给定一个map 返回类型。 11.23 11.2.1节练习中的map以孩子的姓为关键字,保存他们的名的vector,用multimap重写此map。 11.24 下面的程序完成什么功能? 在m中添加一个关键字0,将只“1”赋给它。 11.25 对比下面程序与上一题程序 将“1” 存放在vector v的第一个位置。 11.26 可以用什么类型来对一个map进行下标操作?下标运算符返回的类型是什么?请给出一个具体例子 -- 即,定义一个map,然后写出一个可以用来对map进行下标操作的类型以及下标运算符会返回的类型。 11.27 对于什么问题你会使用count来解决?什么时候你又会选择find呢? 当只关心一个特定的元素是否在容器中,使用find。 在允许重复关键字的容器中,如果要对某个特定的元素进行计数,则使用count。 11.28 对于一个string到int的vector的map,定义并初始化一个变量来保存在其上调用find所返回的结果。 11.29 如果给定的关键字不在容器中,upper_bound、lower_bound和equal_range分别会返回什么? 如果给定的关键字不在容器中, 则upper_bound和lower_bound都返回关键字的第一个安全插入点 -- 不影响容器中元素顺序的插入位置。equal_range返回的两个迭代器都指向关键字可以插入的位置。 11.30 对于本节最后一个程序中的输出表达式,解释运算对象pos.first->second的含义。 pos.first->second意为给定关键字返回的第一个迭代器的value值。 11.31 编写程序,定义一个作者及其作品的multimap。使用find在multimap中查找一个元素并用erase删除它。确保你的程序在元素不在map中时也能正常运行。 11.32 使用上一题定义的multimap编写一个程序,按字典序打印作者列表和他们的作品。 11.33 实现你自己版本的单词转换程序。 11.34 如果你将transform函数中的find替换为下标运算符,会发生什么情况? 若使用下标运算符,如果转换map中要查找的key不存在,则会直接插入一条新的数据,value为空。 11.35 在buildMap中,如果进行如下改写,会有什么效果? 如果转换文件中有重复key,若使用下标进行插入,则value是最后文件中key对应的最后一个短语。而如果使用insert,则key对应的是第一个短语。 11.36 我们的程序并没有检查输入文件的合法性,特别是,它假定转换规则文件中的规则都是有意义的。如果文件中的某一行包含一个关键字、一个空格,然后就结束了,会发生什么?预测程序的行为并进行验证,再与你的程序进行比较。 如果文件中的某一行包含一个关键字、一个空格,然后就结束了,那程序会抛出runtime_error,提示no rules for k. 11.37 一个无序容器与其有序版本相比有何优势?有序版本有何优势? 有序容器的特点: 无序容器的特点: 11.38 用unordered_map重写单词计数程序和单词转换程序。 c++ primer 第五版第十一章 标签:substr string second 速度 cout orm 行号 重新定义 初始 原文地址:https://www.cnblogs.com/songshuguiyu/p/9547602.html
void test1103()
{
map
#include
void test1107()
{
map
void test1108()
{
std::vector<:string> exclude = { "aa", "bb", "cc", "dd", "ee", "ff" };
for (std::string word; std::cout > word; )
{
auto is_excluded = std::binary_search(exclude.cbegin(), exclude.cend(), word);
auto reply = is_excluded ? "excluded" : "not excluded";
std::cout
map
map
::iterator, int> l;
// 可以编译通过,但不能实际使用,因为iterator不能支持比较操作。
bool compareIsbn(const Sales_data& lhs, const Sales_data& rhs)
{
return lhs.isbn() > rhs.isbn();
}
void test1111()
{
using compare = bool(*)(const Sales_data&, const Sales_data&);
multimap
vectoe
void test1113()
{
vector
void test1114()
{
map
map
copy(v.begin(), v.end(), inserter(c, c.end()));
// 将v中的元素拷贝到c中。使用合法,可以使用inserter将关联容器当作一个目的位置。
copy(v.begin(), v.end(), back_inserter(c));
// 意义同上,但是不合法,因为multiset没有push_back方法,不能调用back_inserter
copy(c.begin(), c.end(), inserter(v, v.end()));
// 将c中的元素拷贝到v中,使用合法,vector可以使用inserter。
copy(c.begin(), c.end(), back_inserter(v));
// 意义同上,合法,vector有push_back方法,可以使用back_inserter.
map
using compareType = bool (*)(const Sales_data &lhs, const Sales_data &rhs);
std::multiset
void test1120()
{
map
while (cin >> word)
++word_count.insert({ word, 0 }).first->second;
while reading into word
if word_count has key word:
word_count[word] += 1
else:
word_count[word] = 0
word_count[word] += 1
pair
void test1123()
{
multimap
map
vector
void test1126()
{
map
void test1127()
{
map
void test1131()
{
multimap
void test1132()
{
multimap
map
trans_map[key] = value.substr(1);
改为trans_map.insert({key, value.substr(1)})
void test1138()
{
unordered_map
上一篇:JavaScript模拟自由落体