当前位置: 首页 > news >正文

《C++ Primer Plus》第16章:string类和标准模板库(8)

关联容器

关联容器(associative container)是对容器概念的另一个改进。关联容器将值与键关联在一起,并使用键来查找值。例如,值可以表示雇员信息(如姓名、地址、办公室号码、家庭电话和工作电话、健康计划等)的结构,而键可以是唯一的员工编号。为获取雇员信息,程序将使用键查找雇员结构。前面说过,对于容器 X,表达式 X::value_type 通常指出了存储在容器中的值类型。对于关联容器来说,表达式 X::key_type 指出了键的类型。

关联容器的优点在于,它提供了对元素的快速访问。与序列相似,关联容器也允许插入新元素,但不能指定元素的插入位置。原因是关联容器通常有用于确定数据放置位置的算法,以便能够快速检索信息。

关联容器通常是使用某种树实现的。树是一种数据结构,其根节点链接到一个或两个节点,而这些节点又链接到一个或两个节点,从而形成分支结构。像链表一样,节点使得添加或删除数据项比较简单;但相对于链表,树的查找速度更快。

STL提供了4种关联容器:set、multiset、map 和 multimap。前两种是在头文件 set(以前分别为 set.h 和 multiset.h)种定义的,而后两种是在头文件 map(以前分别为 map.h 和 multimap.h)中定义的。

最简单的关联容器是 set,其值类型与键相同,键是唯一的,这意味着集合中不会有多个相同的键。确实,对于 set 来说,值就是键。multiset 类似于 set,只是可能有多个值的键相同。例如,如果键和值的类型为 int,则 multiset 对象包含的内容可以是 1、2、2、2、3、5、7、7。

在 map 中,值与键的类型不同,键是唯一的,每个键只对应一个值。multimap 与 map 相似,只是一个键可以与多个值相关联。

有关这些类型的信息很多,无法在本章全部列出(但附录G列出了方法),这里只介绍一个使用 set 的简单例子和一个使用 multimap 的简单例子。

  1. set 示例
    STL set 模拟了多个概念,它是关联集合,可反转,可排序,且键是唯一的,所以不能存储多个相同的值。与 vector 和 list 相似,set 也使用模板参数来指定要存储的值类型:

    set<string> A;		// a set of string objects
    

    第二个模板参数是可选的,可用于指示用来对键进行排序的比较函数或对象。默认情况下,将使用模板 less<> (稍后将讨论)。老式 C++ 实现k额能没有提供默认值,因此必须显示指定模板参数:

    set<string, less<string> > A;		// older implementation
    

    请看下面的代码:

    const int N = 6;
    string s1[N] = {"buffoon", "thinkers", "for", "heavy", "can", "for" };
    set<string> A(s1, s1 + N);		// initialize set A using a range from array
    ostream_iterator<string, char> out(cout, " ");
    copy(A.begin(), A.end(), out);
    

    与其他容器相似,set 也有一个将迭代器区间作为参数的构造函数。这提供了一种将集合初始化为数组内容的简单方法。请记住,区间的最后一个元素是超尾,s1+N 指向数组 s1 尾部后面的一个位置。上述代码片段的输出表明,键是唯一的(字符串"for"在数组中出现了2次,但在集合中值出现了1次),且集合被排序:

    buffoon can for heavy thinkers
    

    数学为集合定义了一些标准操作,例如,并集包含两个集合合并后的内容。如果两个集合包含相同的值,则这个值在并集中只出现一次,这是因为键是唯一的。交集包含两个集合都有的元素。两个集合的差是第一个集合减去两个集合都有的元素。

    STL 提供了支持这些操作的算法。它们是通用的函数,而不是方法,因此并非只能用于 set 对象。然而,所有 set 对象都自动满足使用这些算法的先决条件,即容器是经过排序的。 set_union() 函数接受 5 个迭代器参数。前两个迭代器定义了第一个集合的区间,接下来的两个定义了第二个集合区间,最后一个迭代器是输出迭代器,指出将结果集合复制到什么位置。例如,要显示集合 A 和 B 的丙级,可以这样做:

    set_union(A.begin(), A.end(), B.begin(),B.end(),ostream_iterator<string, char> out(cout, " "));
    

    假设要将结果放到集合 C 中,而不是显示它,则最后一个参数应是一个指向C的迭代器。显而易见的选择是 C.begin(),但它不管用,原因有两个。首先,关联集合将键看作常量,所以C.begin() 返回的迭代器是常量迭代器,不能用作输出迭代器。不直接使用 C.begin() 的第二个原因是,与 copy() 相似,set_union() 将覆盖容器中已有的数据,并要求容器有足够的空间容纳新信息。C 是空的,不能满足这种要求。但前面讨论的模板 insert_iterator 可以解决这两个问题。前面说过,它可以将复制转换为插入。另外,它还模拟了输出迭代器概念,可以用它将信息写入容器。因此,可以创建一个匿名 insert_iterator,将信息复制给 C。前面说过,其构造函数将容器名称和迭代器作为参数:

    set_uniong(A.begin(), A.end(), B.begin(), B.end(), insert_iterator<set<string> >(C. C.begin() );
    

    函数 set_intersection() 和 set_difference() 分别查找交集和获得两个集合的差,它们的接口与 set_union() 相同。两个有用的方法是 lower_bound() 和 upper_bound()。方法 lower_bound() 将键作为参数并返回一个迭代器,该迭代器指向集合中第一个不小于键参数的成员。同样,方法 upper_bound() 将键作为参数,并返回一个迭代器,该迭代器指向集合中第一个大于键参数的成员。例如,如果有一个字符串集合,则可以用这些方法获得一个这样的区间,即包含集合中从 “b” 到 “f” 的所有字符串。

    因为排序决定了插入的位置,所以这种类包含只指定要插入的信息,而不指定位置的插入方法。例如,如果 A 和 B 是字符串集合,则可以这样做:

    string s("tennis");
    A.insert(s);			// insert a value
    B.insert(A.begin(), A.end() );		// insert a range
    

    下面的程序演示了集合的这些用途:

    // setops.cpp -- some set operations
    #include <iostream>
    #include <string>
    #include <set>
    #include <algorithm> 
    #include <iterator>int main(){using namespace std;const int N = 6;string s1[N] = {"buffoon", "thinkers", "for", "heavy", "char", "for"};string s2[N] = {"metal", "any", "food", "elegant", "deliver", "for"};set<string> A(s1, s1+N);set<string> B(s2, s2+N);ostream_iterator<string, char> out(cout, " ");cout << "Set A: ";copy(A.begin(), A.end(), out);cout << endl;cout << "Set B: ";copy(B.begin(), B.end(), out);cout << endl;cout << "Union of A and B:\n";set_union(A.begin(), A.end(), B.begin(), B.end(), out);cout << endl;cout << "Intersection of A and B:\n";set_intersection(A.begin(), A.end(), B.begin(), B.end(), out);cout << endl;cout << "Difference of A and B:\n";set_difference(A.begin(), A.end(), B.begin(), B.end(), out);cout << endl;set<string> C;cout << "Set C:\n";set_union(A.begin(),A.end(),B.begin(),B.end(),insert_iterator<set<string> >(C,C.begin()));copy(C.begin(),C.end(),out);cout << endl;string s3("grungy");C.insert(s3);cout << "Set C after insertion:\n";copy(C.begin(), C.end(), out);cout << endl;cout << "Showin a range:\n";copy(C.lower_bound("ghost"),C.upper_bound("spook"),out);cout << endl;return 0;
    }
    

    下面是程序的输出:

    Set A: buffoon char for heavy thinkers
    Set B: any deliver elegant food for metal
    Union of A and B:
    any buffoon char deliver elegant food for heavy metal thinkers
    Intersection of A and B:
    for
    Difference of A and B:
    buffoon char heavy thinkers
    Set C:
    any buffoon char deliver elegant food for heavy metal thinkers
    Set C after insertion:
    any buffoon char deliver elegant food for grungy heavy metal thinkers
    Showin a range:
    grungy heavy metal
    

    和本章大多数示例一样,该程序在处理名称空间 std 时采取了偷懒的方式:

    using namespace std;
    

    这样做旨在简化表达方式。这些示例使用了名称空间中非常多的元素,如果使用 using 声明或作用域运算符,代码将变得混乱:

    std::set<std::string> B(s2, s2+N)
    std::ostream_iterator<std::string, char> out(std::cout, " ");
    std::cout << "Set A: ";
    std::copy(A.begin(), A.end(), out);
    
  2. multimap 示例
    与 set 相似,multimap 也是可反转的、经过排序的关联容器,但键和值的类型不同,且同一个键可能与多个值相关联。
    基本的 multimap 声明使用模板参数指定键的类型和存储的值类型。例如,下面的声明创建一个 multimap 对象,其中键类型为 int,存储的值类型为 string:

    multimap<int, string> codes;
    

    第3个模板参数是可选的,指出用于对键进行排序的比较函数或对象。在默认情况下,将使用模板less<> (稍后将讨论),该模板将键类型作为参数。老式 C++ 实现可能要求显示指定该模板参数。

    为将信息结合在一起,实际的值类型将键类型和数据类型结合为一对。为此,STL 使用模板类pair<class T, class U> 将这两种值存储到一个对象中。如果 keytype 是键类型,而 datatype 是存储的数据类型,则值类型为 pair<const keytype, datatype>。例如,前面声明的 codes 对象的值类型为 pair<const int, string>。

    例如,假设要用区号作为键来存储城市名(这恰好与 codes 声明一致,它将键类型声明为 int,数据类型声明为 string),则一种方法是创建一个 pair,再将它插入:

    pair<const int, string> item(213, "Los Angeles");
    codes.insert(item);
    

    也可使用一条语句创建匿名 pair 对象并将它插入:

    codes.insert(pair<const int, string> (213, "Los Angeles"));
    

    因为数据项是按键排序的,所以不需要指出插入位置。
    对于 pair 对象,可以使用 first 和 second 成员来访问其两个部分了:

    pair<const int, string> item(213, "Los Angeles");
    cout << item.first << ' ' << item.second << endl;
    

    如何获得有关 multimap 对象的信息呢?成员函数 count() 接受键作为参数,并返回具有该键的元素数目。成员函数 lower_bound() 和 upper_bound() 将键作为参数,且工作原理与处理 set 时相同。成员函数 equal_range() 用键作为参数,且返回两个迭代器,它们表示的区间与该键匹配。为返回两个值,该方法将它们封装在一个 pair 对象中,这里 pair 的两个模板参数都是迭代器。例如,下面的代码打印 codes 对象中区号为 718 的所有城市:

    pair<multimap<KeyType, string>::iterator, multimap<KeyType, string>::iterator> range= cods.equal_range(718);
    cout << "Cities with area code 718:\n";
    std::multimap<KeyType, std::string>::iterator it;
    for (it - range.first; it != range.seconde; ++it){cout << (*it).second << endl;
    }
    

    在声明中可使用 C++11 自动类型推断功能,这样代码将简化为如下所示:

    auto range = codes.equal_range(718);
    cout << "Cities with area code 718:\n";
    for (auto it = range.first; it != range.second; ++it){cout << (*it).second << endl;
    }
    

    下面的程序演示了上述大部分计数,它也是用 typedef 来简化代码:

    // multimap.cpp -- use a multimap#include<iostream>
    #include<string>
    #include<map>
    #include<algorithm>typedef int KeyType;
    typedef std::pair<const KeyType, std::string> Pair;
    typedef std::multimap<KeyType, std::string> MapCode;int main(){using namespace std;MapCode codes;codes.insert(Pair(415,"San Francisco"));codes.insert(Pair(510, "Oakland"));codes.insert(Pair(718, "Brooklyn"));codes.insert(Pair(718, "Staten Island"));codes.insert(Pair(415, "San Rafael"));codes.insert(Pair(510, "Berkeley"));cout << "Number of cities with area code 415: "<< codes.count(415) << endl;cout << "Number of cities with area code 718: "<< codes.count(718) << endl;cout << "Number of cities with area code 510: "<< codes.count(510) << endl;cout << "Area Code City\n";MapCode::iterator it;for(it = codes.begin(); it!=codes.end(); ++it){cout << "     " << (*it).first << "    "<< (*it).second << endl;}pair<MapCode::iterator, MapCode::iterator> range= codes.equal_range(718);cout << "Cities with area code 718:\n";for (it = range.first; it!=range.second; ++it){cout << (*it).second << endl;}return 0;
    }
    

    下面的是程序的输出:

    Number of cities with area code 415: 2
    Number of cities with area code 718: 2
    Number of cities with area code 510: 2
    Area Code City415    San Francisco415    San Rafael510    Oakland510    Berkeley718    Brooklyn718    Staten Island
    Cities with area code 718:
    Brooklyn
    Staten Island
    

无序关联容器(C++11)

无序关联容器是对容器概念的另一种改进。与关联容器一样,无序关联容器也将值与键关联起来,并使用键来查找值。但底层的差别在于,关联容器是基于树结构的,而无序关联容器是基于数据结构哈希表的,这旨在提高添加和删除元素的速度以及提高查找算法的效率。有4种无序关联容器,它们是 unordered_set、unordered_multiset、unordered_map 和 unordered_multimap,将在附录 G 更详细地介绍。

相关文章:

《C++ Primer Plus》第16章:string类和标准模板库(8)

关联容器 关联容器&#xff08;associative container&#xff09;是对容器概念的另一个改进。关联容器将值与键关联在一起&#xff0c;并使用键来查找值。例如&#xff0c;值可以表示雇员信息&#xff08;如姓名、地址、办公室号码、家庭电话和工作电话、健康计划等&#xff…...

Linux安装达梦8数据库

Linux安装达梦8数据库 服务器系统&#xff1a;centos7 数据库版本&#xff1a;达梦8 先获取安装包&#xff1a;https://eco.dameng.com/download/?_blank 选择相应版本下载,下载完解压之后会得到一个iso文件&#xff0c;把他上传到服务器上&#xff0c;建议上传到/opt目录下…...

[数据库]初识数据库

●&#x1f9d1;个人主页:你帅你先说. ●&#x1f4c3;欢迎点赞&#x1f44d;关注&#x1f4a1;收藏&#x1f496; ●&#x1f4d6;既选择了远方&#xff0c;便只顾风雨兼程。 ●&#x1f91f;欢迎大家有问题随时私信我&#xff01; ●&#x1f9d0;版权&#xff1a;本文由[你帅…...

Redis的缓存雪崩、击穿、穿透和解决方案

2.5 缓存穿透问题的解决思路 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护…...

52000000

选择题(共52题,合计52.0分) 1. 敏捷团队在项目执行过程中会用到一种叫做“看板”的可视化工具&#xff0c;它可显示WIP&#xff0c; 帮助识别瓶颈和过度承诺&#xff0c; 从而使团队能够优化工作流。请从下列选项中选择WIP的最佳解释?() A 等待初步加工的材料的库存 B 目前正…...

内网资源探测

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;内网安全 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远是…...

Java后端内部面试题(前一部分)

面试题 基础篇 1、Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象&#xff08;Java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; 2、面向对象和面向过程的区别 面向过程&#xff1a;是分析解决问题的步骤&#xff0c;然后用函数把…...

关于如何抄引擎源码

前两天&#xff0c;后台有网友发私信给我&#xff0c;问我如何抄引擎源码。我一愣&#xff0c;感觉像吃饭喝水一样自然。 抄源码的好处就不说了&#xff0c;抄之前不懂的内容&#xff0c;抄完后就懂了&#xff0c;至少懂一部分了。当然也可以只读不抄&#xff0c;不过&#xff…...

差分模拟信号转单端输出电路设计

需求分析&#xff1a; 1.差分输入0~16V -Vpp电压量&#xff1b; 2.输入频率0~1.2KHz&#xff1b; 3.单端对应输出0~3V的模拟量&#xff1b; 4.输出频率对应0~1.2KHz&#xff1b; 5.供电范围3~5V。 针对以上需求&#xff0c;设计如下图所示电路。 1.电路功能&#xff1a; …...

Java中的clone方法

注解定义&#xff1a; 注解是一种注释机制&#xff0c;它可以注释包、类、方法、变量、参数&#xff0c;在编译器生成类文件时&#xff0c;标注可以被嵌入到字节码中。注解的分类&#xff1a;内置注解Override :重写方法&#xff0c;引用时没有该方法时会编译错误public class …...

数据结构—二叉树、完全二叉树的性质

# 1 若一棵度为4的树中度为1、2、3、4的结点个数分别为4、3、2、2&#xff0c;则该树的总结点个数是多少&#xff1f; 正确答案&#xff1a; 答案&#xff1a;结点总数nn0n1n2n3n4&#xff0c;又由于除根结点外&#xff0c;每个结点都对应一个分支&#xff0c;所以总的分支数等…...

JDBC编程复习

文章目录JDBC1.概念2.原理3. 如何使用JDBC编程1. 下载mysql的jdbc驱动2. 项目中引入驱动4. JDBC使用1. 和数据库建立连接2.获取连接3. Statement对象4. 释放资源JDBC 1.概念 JDBC,即Java Database Connectivity&#xff0c;java数据库连接。是Java提供的API用来执行SQL语句&a…...

c++基础入门二

一、数组的引用int main() {int a 10, b 20;int ar[10] { 1,2,3,4,6,7 };int& x ar[0];int& p[5] ar;//errorint(&p)[10] ar;//引用整个数组的大小sizeof(ar)int(*p)[10] &ar;//typesize表示整个数组//只有在这三种情况下代表整个数组&#xff0c;其他情…...

企业数字化转型的产品设计思路

数字化转型的核心是全面重塑企业的管理模式和经营模式&#xff0c;是迈向数字经济时代的方式。一、到底什么是数字化转型&#xff1f;数字化转型并不神秘。数字化转型是一种经营方式、一种经营理念&#xff0c;是将企业相关的人、物料、设备、资金等要素进行系统运转&#xff0…...

Linux日志分析常用命令

一&#xff1a;常用命令1、tail参数&#xff1a; tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ] 参数说明&#xff1a; -f 该参数用于监视File文件增长。 -c Number 从 Number 字节位置读取指定文件 -n Number 从 Number 行位置读取指…...

Allegro如何使用Snake命令走蛇形线操作指导

Allegro如何使用Snake命令走蛇形线操作指导 在做PCB设计的时候,遇到不规则BGA的时候,蛇形走线是惯用的走线方式,类似下图 Allegro支持蛇形走线,具体操作如下 首先把过孔打好,尽量上下左右间距一致,不容易出现偏差,如下图在Command命令栏下方输入snake,然后回车...

在 Eclipse 中创建 Maven 项目

1.在 Eclipse 中配置 MavenEclipse 中默认自带 Maven 插件&#xff0c;但是自带的 Maven 插件不能修改本地仓库&#xff0c;所以通常我们不使用自带的 Maven &#xff0c;而是使用自己安装的&#xff0c;在 Eclipse 中配置 Maven 的步骤如下&#xff1a; 1) 点击 Eclipse 中的 …...

flex 布局相关属性的使用

简单概述 为元素添加 display:flex; 的属性后&#xff0c;当前元素被视为弹性布局的盒子容器(box)&#xff0c;其子元素被视为弹性布局项目(item)。item 会在 box 内灵活布局&#xff0c;解决了对齐、分布、尺寸等响应式问题。 演示 demo <template><div class&quo…...

【C++】类和对象(第一篇)

文章目录1. 面向过程和面向对象初步认识2.类的引入3.类的定义3.1 类的两种定义方式3.2 成员变量命名规则建议4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 类对象大小的计算7.2 类对象的存储方式猜测7.3 结构体内存对齐规则复习8…...

springboot 接入websocket实现定时推送消息到客户端

目录说明代码实现说明 如标题&#xff0c;举例需求场景&#xff1a; 前端与后端websocket连接上后&#xff0c;多用户登录&#xff0c;后端根据不同用户定时发消息给前端用于展示 代码实现 1、 <dependency><groupId>org.springframework.boot</groupId>…...

虚拟机磁盘重新分区增加Docker磁盘空间

目录一、简介二、重新分区 挂载目录2.1 增加虚拟机硬盘空间2.2 重新分区2.3 格式化新分区2.4 挂载docker目录三、重新拉取一、简介 今天在使用docker pull 拉取镜像时&#xff0c;报了no such file or directory的信息&#xff0c;原来是Docker的磁盘空间满了 #查看Docker Roo…...

Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

1、逻辑删除 接下来要讲解是删除中比较重要的一个操作&#xff0c;逻辑删除&#xff0c;先来分析下问题: 这是一个员工和其所签的合同表&#xff0c;关系是一个员工可以签多个合同&#xff0c;是一个一(员工)对多(合同)的表 员工ID为1的张业绩&#xff0c;总共签了三个合同&a…...

RabbitMq

一、四大核心概念生产者&#xff1a;产生数据发送消息的程序是生产者交换机&#xff1a;交换机是RabbitMQ非常重要的一个部件&#xff0c;一方面它接收来自生产者的消息&#xff0c;另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息&#xff0c;是将这…...

Qt学习笔记

文章目录一、C指针函数驼峰命名法、下划线命名法编程报错二、C三、Qt语法Qt历史、Qt应用Qt特色快捷键Qt类的族谱QWidgetQPushButtonQDebug对象树Qt窗口坐标信号和槽Qt自带的信号的槽自定义的信号和槽Qt4版本 vs Qt5版本 的connect写法函数指针解决重载问题拓展类型转换QString …...

洛谷——P1091 合唱队形

【题目描述】 n 位同学站成一排&#xff0c;音乐老师要请其中的 n−k 位同学出列&#xff0c;使得剩下的 k 位同学排成合唱队形。 合唱队形是指这样的一种队形&#xff1a;设 kk 位同学从左到右依次编号为 1,2, … ,k&#xff0c;他们的身高分别为​,​, … ,​&#xff0c;则…...

使用logstash把mysql同步到es,Kibana可视化查看

1&#xff1a;首先需要电脑本地有es环境&#xff0c;并且要牢记版本后&#xff0c;后续安装的logstash和Kibana一定要版本对应 查看es版本&#xff1a;http://localhost:9200/ 2&#xff1a;安装对应版本的logstash&#xff1a;找到自己对应ES版本&#xff0c;然后解压 Logst…...

Vue3.0 setup的使用及作用

目录开篇&#xff1a;1.什么是setup2.setup怎么使用3.setup中包含的生命周期函数3.setup相关参数4.setup特性总结总结开篇&#xff1a; 从vue2升级 vue3&#xff0c;vue3是可以兼容vue2。所以v3可以采用v2的选项式api&#xff0c;但是v2不能使用v3的组合式api&#xff0c;由于…...

Ubuntu18.04安装Vertica

目录下载安装包安装(Ubuntu18.04)配置 I/O Scheduler配置 TZSupport Tools配置 swapinessDisk ReadaheadEnabling chrony or ntpd自启动项错误处理后重装下载安装包 官网11.0版本或者10.0(deb)安装包可私信提供百度网盘链接&#xff1b; 安装(Ubuntu18.04) testvertica:~$ s…...

2.计算机基础-计算机网络面试题—基础知识、容器、面向对象、并发编程

本文目录如下&#xff1a;计算机基础-计算机网络 面试题一、基础知识简述 TCP 和 UDP 的区别&#xff1f;http与https的区别?Session 和 Cookie 有什么区别&#xff1f;URL是什么&#xff1f;由哪些部分组成&#xff1f;OSI 的 五层模型 都有哪些&#xff1f;get 和 post 请求…...

解决Mac 安装应用提示:xx已损坏,无法打开。 您应该将它移到废纸篓问题

许多新手mac 用户安装应用得时候会出现 “已损坏&#xff0c;无法打开。您应该将它移到废纸娄” 导致无法正常安装&#xff0c;其实应用软件b并没有损坏&#xff0c;只是系统安全设置&#xff0c;我们改如何解决呢&#xff1f; 1、开启允许任何来源 苹果已经取消了允许“任何…...

公司内部交流 网站模板/郑州网站开发公司

注&#xff1a;博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本。 在实际项目中LinkedList也是使用频率非常高的一种集合&#xff0c;本博客将从源码角度带领大家学习关于LinkedList的知识。 一LinkedList类的定义&#xff1a; public class LinkedList<E>exten…...

平板电脑可以做网站吗/中国营销传播网

第一 &#xff0c;eclipse 中如何 插件安装 参看 Android 开发环境配置环境变量 &#xff08;附图&#xff09; http://blog.csdn.net/janronehoo/article/details/6505289 第二 &#xff0c;viplugin 插件安装地址 http://viplugin.com/ viPlugin是Eclipse的一个插件…...

怎么在服务器中安装WordPress/南京seo优化推广

我们在做接口测试时&#xff0c;除了常见的http接口&#xff0c;还有一种比较多见&#xff0c;就是socket接口&#xff0c;今天讲解下怎么用Python进行websocket接口测试。现在大多数用的都是websocket&#xff0c;那我们就先来安装一下websocket的安装包。pip install websock…...

wordpress 主题demo/西地那非片的正确服用方法

注解的好处&#xff1a;1.能够读懂别人写的代码&#xff0c;特别是框架相关的代码。2.本来可能需要很多配置文件&#xff0c;需要很多逻辑才能实现的内容&#xff0c;就可以使用一个或者多个注解来替代&#xff0c;这样就使得编程更加简洁&#xff0c;代码更加清晰。3.&#xf…...

网站设计与制作的流程/重庆 seo

问题描述&#xff1a;为了实现前后端的彻底分离&#xff0c;我们彻底放弃使用.jsp的方式在前端显示页面中穿插java代码&#xff0c;但是带来的问题也比较明显&#xff0c;就是前端向后台发出请求的时候可能会出现跨域的问题&#xff0c;浏览器为了安全会阻止跨域请求。目前有一…...

单位网站建设收费标准/网页设计与制作教程

要回答你的这个问题,I have a UIBezierPath inside my custom UIView draw(_ rect: CGRect)function. I would like to fill the path with a gradient color.让我们说你有一个椭圆形的路径,let path UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100))要创建…...