我的编程空间,编程开发者的网络收藏夹
学习永远不晚

R语言中Rcpp基础知识点有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

R语言中Rcpp基础知识点有哪些

这篇文章将为大家详细讲解有关R语言中Rcpp基础知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    1. 相关配置和说明

    由于Dirk的书Seamless R and C++ Integration with Rcpp是13年出版的,当时Rcpp Attributes这一特性还没有被CRAN批准,所以当时调用和编写Rcpp函数还比较繁琐。Rcpp Attributes(2016)极大简化了这一过程(“provides an even more direct connection between C++ and R”),保留了内联函数,并提供了sourceCpp函数用于调用外部的.cpp文件。换句话说,我们可以将某C++函数存在某个.cpp文件中,再从R脚本文件中,像使用source一样,通过sourceCpp来调用此C++函数。

    例如,在R脚本文件中,我们希望调用名叫test.cpp文件中的函数,我们可以采用如下操作:

    library(Rcpp)Sys.setenv("PKG_CXXFLAGS"="-std=c++11")sourceCpp("test.cpp")

    其中第二行的意思是使用C++11的标准来编译文件。

    test.cpp文件中, 头文件使用Rcpp.h,需要输出到R中的函数放置在//[[Rcpp::export]]之后。如果要输出到R中的函数需要调用其他C++函数,可以将这些需要调用的函数放在//[[Rcpp::export]]之前。

    #include <Rcpp.h>using namespace Rcpp;//[[Rcpp::export]]

    为进行代数计算,Rcpp提供了RcppArmadillo和RcppEigen。如果要使用此包,需要在函数文件开头注明依赖关系,例如// [[Rcpp::depends(RcppArmadillo)]],并载入相关头文件:

    // [[Rcpp::depends(RcppArmadillo)]]#include <RcppArmadillo.h>#include <Rcpp.h>using namespace Rcpp;using namespace arma;// [[Rcpp::export]]

    C++的基本知识可以参见此处。

    2. 常用数据类型

    关键字描述
    int/double/bool/String/auto整数型/数值型/布尔值/字符型/自动识别(C++11)
    IntegerVector整型向量
    NumericVector数值型向量(元素的类型为double)
    ComplexVector复数向量 Not Sure
    LogicalVector逻辑型向量; R的逻辑型变量可以取三种值:TRUE, FALSE, NA; 而C++布尔值只有两个,true or false。如果将R的NA转化为C++中的布尔值,则会返回true。
    CharacterVector字符型向量
    ExpressionVectorvectors of expression types
    RawVectorvectors of type raw
    IntegerMatrix整型矩阵
    NumericMatrix数值型矩阵(元素的类型为double)
    LogicalMatrix逻辑型矩阵
    CharacterMatrix字符矩阵
    List aka GenericVector列表;lists;类似于R中列表,其元素可以使任何数据类型
    DataFrame数据框;data frames;在Rcpp内部,数据框其实是通过列表实现的
    Function函数型
    Environment环境型;可用于引用R环境中的函数、其他R包中的函数、操作R环境中的变量
    RObject可以被R识别的类型

    注释:

    某些R对象可以通过as<Some_RcppObject>(Some_RObject)转化为转化为Rcpp对象。例如:
    在R中拟合一个线性模型(其为List),并将其传入C++函数中

    >mod=lm(Y~X);
    NumericVector resid = as<NumericVector>(mod["residuals"]);NumericVector fitted = as<NumericVector>(mod["fitted.values"]);

    可以通过as<some_STL_vector>(Some_RcppVector),将NumericVector转换为std::vector。例如:

    std::vector<double> vec;vec = as<std::vector<double>>(x);

    在函数中,可以用wrap(),将std::vector转换为NumericVector。例如:

    arma::vec long_vec(16,arma::fill::randn);vector<double> long_vec2 = conv_to<vector<double>>::from(long_vec);NumericVector output = wrap(long_vec2);

    在函数返回时,可以使用wrap(),将C++ STL类型转化为R可识别类型。示例见后面输入和输出示例部分。

    以上数据类型除了Environment之外(Function不确定),大多可直接作为函数返回值,并被自动转化为R对象。

    算数和逻辑运算符号+, -, *, /, ++, --, pow(x,p), <, <=, >, >=, ==, !=。逻辑关系符号&&, ||, !

    3. 常用数据类型的建立

    //1. VectorNumericVector V1(n);//创立了一个长度为n的默认初始化的数值型向量V1。NumericVector V2=NumericVector::create(1, 2, 3); //创立了一个数值型向量V2,并初始化使其含有三个数1,2,3。LogicalVector V3=LogicalVector::create(true,false,R_NaN);//创立了一个逻辑型变量V3。如果将其转化为R Object,则其含有三个值TRUE, FALSE, NA。//2. MatrixNumericMatrix M1(nrow,ncol);//创立了一个nrow*ncol的默认初始化的数值型矩阵。//3. Multidimensional ArrayNumericVector out=NumericVector(Dimension(2,2,3));//创立了一个多维数组。然而我不知道有什么卵用。。//4. ListNumericMatrix y1(2,2);NumericVector y2(5);List L=List::create(Named("y1")=y1,                    Named("y2")=y2);//5. DataFrameNumericVector a=NumericVector::create(1,2,3);CharacterVector b=CharacterVector::create("a","b","c");std::vector<std::string> c(3);c[0]="A";c[1]="B";c[2]="C";DataFrame DF=DataFrame::create(Named("col1")=a,                               Named("col2")=b,                               Named("col3")=c);

    4. 常用数据类型元素访问

    元素访问描述
    [n]对于向量类型或者列表,访问第n个元素。对于矩阵类型,首先把矩阵的下一列接到上一列之下,从而构成一个长列向量,并访问第n个元素。不同于R,n从0开始
    (i,j)对于矩阵类型,访问第(i,j)个元素。不同于R,i和j从0开始。不同于向量,此处用圆括号。
    List["name1"]/DataFrame["name2"]访问List中名为name1的元素/访问DataFrame中,名为name2的列。

    5. 成员函数

    成员函数描述
    X.size()返回X的长度;适用于向量或者矩阵,如果是矩阵,则先向量化
    X.push_back(a)将a添加进X的末尾;适用于向量
    X.push_front(b)将b添加进X的开头;适用于向量
    X.ncol()返回X的列数
    X.nrow()返回X的行数

    6. 语法糖

    6.1 算术和逻辑运算符

    +, -, *, /, pow(x,p), <, <=, >, >=, ==, !=, !

    以上运算符均可向量化。

    6.2. 常用函数

    is.na()
    Produces a logical sugar expression of the same length. Each element of the result expression evaluates to TRUE if the corresponding input is a missing value, or FALSE otherwise.

    seq_len()
    seq_len( 10 ) will generate an integer vector from 1 to 10 (Note: not from 0 to 9), which is very useful in conjugation withsapply() and lapply().

    pmin(a,b) and pmax(a,b)
    a and b are two vectors. pmin()(or pmax()) compares the i <script type="math/tex" id="MathJax-Element-1">i</script>th elements of a and b and return the smaller (larger) one.

    ifelse()
    ifelse( x > y, x+y, x-y ) means if x>y is true, then do the addition; otherwise do the subtraction.

    sapply()
    sapply applies a C++ function to each element of the given expression to create a new expression. The type of the resulting expression is deduced by the compiler from the result type of the function.

    The function can be a free C++ function such as the overload generated by the template function below:

    template <typename T>T square( const T& x){    return x * x ;}sapply( seq_len(10), square<int> ) ;

    Alternatively, the function can be a functor whose type has a nested type called result_type

    template <typename T>struct square : std::unary_function<T,T> {    T operator()(const T& x){    return x * x ;    }}sapply( seq_len(10), square<int>() ) ;

    lappy()
    lapply is similar to sapply except that the result is allways an list expression (an expression of type VECSXP).

    sign()

    其他函数

    • 数学函数: abs(), acos(), asin(), atan(), beta(), ceil(), ceiling(), choose(), cos(), cosh(), digamma(), exp(), expm1(), factorial(), floor(), gamma(), lbeta(), lchoose(), lfactorial(), lgamma(), log(), log10(), log1p(), pentagamma(), psigamma(), round(), signif(), sin(), sinh(), sqrt(), tan(), tanh(), tetragamma(), trigamma(), trunc().

    • 汇总函数: mean(), min(), max(), sum(), sd(), and (for vectors) var()

    • 返回向量的汇总函数: cumsum(), diff(), pmin(), and pmax()

    • 查找函数: match(), self_match(), which_max(), which_min()

    • 重复值处理函数: duplicated(), unique()

    7. STL

    Rcpp可以使用C++的标准模板库STL中的数据结构和算法。Rcpp也可以使用Boost中的数据结构和算法。

    7.1. 迭代器

    此处仅仅以一个例子代替,详细参见C++ Primer,或者此处。

    #include <Rcpp.h>using namespace Rcpp;// [[Rcpp::export]]double sum3(NumericVector x) {  double total = 0;  NumericVector::iterator it;  for(it = x.begin(); it != x.end(); ++it) {    total += *it;  }  return total;}

    7.2. 算法

    头文件<algorithm>中提供了许多的算法(可以和迭代器共用),具体可以参见此处。

    For example, we could write a basic Rcpp version of findInterval() that takes two arguments a vector of values and a vector of breaks, and locates the bin that each x falls into.

    #include <algorithm>#include <Rcpp.h>using namespace Rcpp;// [[Rcpp::export]]IntegerVector findInterval2(NumericVector x, NumericVector breaks) {  IntegerVector out(x.size());  NumericVector::iterator it, pos;  IntegerVector::iterator out_it;  for(it = x.begin(), out_it = out.begin(); it != x.end();       ++it, ++out_it) {    pos = std::upper_bound(breaks.begin(), breaks.end(), *it);    *out_it = std::distance(breaks.begin(), pos);  }  return out;}

    7.3. 数据结构

    STL所提供的数据结构也是可以使用的,Rcpp知道如何将STL的数据结构转换成R的数据结构,所以可以从函数中直接返回他们,而不需要自己进行转换。
    具体请参考此处。

    7.3.1. Vectors

    详细信息请参见处此

    创建
    vector<int>, vector<bool>, vector<double>, vector<String>

    元素访问
    利用标准的[]符号访问元素

    元素增加
    利用.push_back()增加元素。

    存储空间分配
    如果事先知道向量长度,可用.reserve()分配足够的存储空间。

    例子:

     The following code implements run length encoding (rle()). It produces two vectors of output: a vector of values, and a vector lengths giving how many times each element is repeated. It works by looping through the input vector x comparing each value to the previous: if it's the same, then it increments the last value in lengths; if it's different, it adds the value to the end of values, and sets the corresponding length to 1.

    #include <Rcpp.h>using namespace Rcpp;// [[Rcpp::export]]List rleC(NumericVector x) {  std::vector<int> lengths;  std::vector<double> values;  // Initialise first value  int i = 0;  double prev = x[0];  values.push_back(prev);  lengths.push_back(1);  NumericVector::iterator it;  for(it = x.begin() + 1; it != x.end(); ++it) {    if (prev == *it) {      lengths[i]++;    } else {      values.push_back(*it);      lengths.push_back(1);      i++;      prev = *it;    }  }  return List::create(    _["lengths"] = lengths,     _["values"] = values  );}
    7.3.2. Sets

    参见链接1,链接2和链接3。

    STL中的集合std::set不允许元素重复,而std::multiset允许元素重复。集合对于检测重复和确定不重复的元素具有重要意义((like unique, duplicated, or in))。

    Ordered set: std::setstd::multiset

    Unordered set: std::unordered_set
    一般而言unordered set比较快,因为它们使用的是hash table而不是tree的方法。
    unordered_set<int>, unordered_set<bool>, etc

    7.3.3. Maps

    table()match()关系密切。

    Ordered map: std::map

    Unordered map: std::unordered_map

    Since maps have a value and a key, you need to specify both types when initialising a map:

     map<double, int> unordered_map<int, double>.

    8. 与R环境的互动

    通过EnvironmentRcpp可以获取当前R全局环境(Global Environment)中的变量和载入的函数,并可以对全局环境中的变量进行修改。我们也可以通过Environment获取其他R包中的函数,并在Rcpp中使用。

    获取其他R包中的函数

    Rcpp::Environment stats("package:stats");Rcpp::Function rnorm = stats["rnorm"];return rnorm(10, Rcpp::Named("sd", 100.0));

    获取R全局环境中的变量并进行更改
    假设R全局环境中有一个向量x=c(1,2,3),我们希望在Rcpp中改变它的值。

    Rcpp::Environment global = Rcpp::Environment::global_env();//获取全局环境并赋值给Environment型变量globalRcpp::NumericVector tmp = global["x"];//获取xtmp=pow(tmp,2);//平方global["x"]=tmp;//将新的值赋予到全局环境中的x

    获取R全局环境中的载入的函数
    假设全局环境中有R函数funR,其定义为:

    x=c(1,2,3);funR<-function(x){  return (-x);}

    并有R变量x=c(1,2,3)。我们希望在Rcpp中调用此函数并应用在向量x上。

    #include <Rcpp.h>using namespace Rcpp;// [[Rcpp::export]]NumericVector funC() {  Rcpp::Environment global =    Rcpp::Environment::global_env();  Rcpp::Function funRinC = global["funR"];  Rcpp::NumericVector tmp = global["x"];  return funRinC(tmp);}

    9. 用Rcpp创建R包

    见此文

    利用Rcpp和RcppArmadillo创建R包

    10. 输入和输出示例

    如何传递数组

    如果要传递高维数组,可以将其存为向量,并附上维数信息。有两种方式:

    通过.attr("dim")设置维数

    NumericVector可以包含维数信息。数组可以用过NumericVector输出到R中。此NumericVector可以通过.attr(“dim”)设置其维数信息。

    // Dimension最多设置三个维数output.attr("dim") = Dimension(3,4,2);// 可以给.attr(“dim”)赋予一个向量,则可以设置超过三个维数NumericVector dim = NumericVector::create(2,2,2,2);output.attr("dim") = dim;

    示例:

    // 返回一个3*3*2数组RObject func(){  arma::vec long_vec(18,arma::fill::randn);  vector<double> long_vec2 = conv_to<vector<double>>::from(long_vec);  NumericVector output = wrap(long_vec2);  output.attr("dim")=Dimension(3,3,2);  return wrap(output);}// 返回一个2*2*2*2数组 // 注意con_to<>::from()RObject func(){  arma::vec long_vec(16,arma::fill::randn);  vector<double> long_vec2 = conv_to<vector<double>>::from(long_vec);  NumericVector output = wrap(long_vec2);  NumericVector dim = NumericVector::create(2,2,2,2);  output.attr("dim")=dim;  return wrap(output);}

    另外建立一个向量存维数,在R中再通过.attr("dim")设置维数

    函数返回一维STL vector

    自动转化为R中的向量

    vector<double> func(NumericVector x){  vector<double> vec;  vec = as<vector<double>>(x);  return vec;}NumericVector func(NumericVector x){  vector<double> vec;  vec = as<vector<double>>(x);  return wrap(vec);}RObject func(NumericVector x){  vector<double> vec;  vec = as<vector<double>>(x);  return wrap(vec);}

    函数返回二维STL vector

    自动转化为R中的list,list中的每个元素是一个vector。

    vector<vector<double>> func(NumericVector x) {  vector<vector<double>> mat;  for (int i=0;i!=3;++i){    mat.push_back(as<vector<double>>(x));  }  return mat;}RObject func(NumericVector x) {  vector<vector<double>> mat;  for (int i=0;i!=3;++i){    mat.push_back(as<vector<double> >(x));  }  return wrap(mat);}

    返回Armadillo matrix, Cube 或 field

    自动转化为R中的matrix

    NumericMatrix func(){  arma::mat A(3,4,arma::fill::randu);  return wrap(A);}arma::mat func(){  arma::mat A(3,4,arma::fill::randu);  return A;}

    自动转化为R中的三维array

    arma::cube func(){  arma::cube A(3,4,5,arma::fill::randu);  return A;}RObject func(){  arma::cube A(3,4,5,arma::fill::randu);  return wrap(A);}

    自动转化为R list,每个元素存储一个R向量,但此向量有维数信息(通过.Internal(inspect())查询)。

    RObject func() {  arma::cube A(3,4,2,arma::fill::randu);  arma::cube B(3,4,2,arma::fill::randu);  arma::field <arma::cube> F(2,1);  F(0)=A;  F(1)=B;  return wrap(F);}

    关于“R语言中Rcpp基础知识点有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    R语言中Rcpp基础知识点有哪些

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    R语言中Rcpp基础知识点有哪些

    这篇文章将为大家详细讲解有关R语言中Rcpp基础知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 相关配置和说明由于Dirk的书Seamless R and C++ Integration
    2023-06-25

    R语言中基本语法的知识点有哪些

    这篇文章主要介绍R语言中基本语法的知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们将开始学习R语言编程,首先编写一个“你好,世界! 的程序。 根据需要,您可以在R语言命令提示符处编程,也可以使用R语言脚
    2023-06-14

    Go语言基础知识点有哪些

    这篇文章主要介绍Go语言基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go 语言教程Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Gries
    2023-06-20

    R语言属性知识点有哪些

    这篇文章主要介绍了R语言属性知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性(attribute):R中对象具备的特性特性描述了所代表的内容以及R解释该对象的方
    2023-06-14

    Python语言常用基础知识点有哪些

    这篇文章主要讲解了“Python语言常用基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python语言常用基础知识点有哪些”吧!python编程中常用的12种基础知识总结:正
    2023-06-15

    R语言中字符串有哪些知识点

    这篇文章主要介绍了R语言中字符串有哪些知识点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在R语言中的单引号或双引号对中写入的任何值都被视为字符串。 R语言存储的每个字符串都
    2023-06-14

    c语言中指针零基础知识点有哪些

    小编给大家分享一下c语言中指针零基础知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.指针是什么(可能有点难理解)指针的是啥?指针实际上就是地址,地址
    2023-06-29

    D语言基础知识有哪些

    本篇文章给大家分享的是有关 D语言基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引言D 语言是一门语法相当优雅的编译型语言,自 1999 年发布至今已发展了 20
    2023-06-16

    JAVA编程语言的基础知识点有哪些

    本篇内容介绍了“JAVA编程语言的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、面向对象的特征有哪些方面1.抽象:抽象就
    2023-06-17

    R语言数据重塑知识点有哪些

    这篇文章给大家分享的是有关R语言数据重塑知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。R 语言中的数据重塑是关于改变数据被组织成行和列的方式。 大多数时间 R 语言中的数据处理是通过将输入数据作为数据
    2023-06-14

    Verilog语言数据类型基础知识点有哪些

    这篇文章主要介绍“Verilog语言数据类型基础知识点有哪些”,在日常操作中,相信很多人在Verilog语言数据类型基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Verilog语言数据类型基础
    2023-07-06

    R语言中循环的相关知识点有哪些

    这篇文章主要介绍“R语言中循环的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言中循环的相关知识点有哪些”文章能帮助大家解决问题。repeatrepeat是最存粹的循环,只要不让
    2023-07-05

    HTML中有哪些基础知识点

    本篇内容主要讲解“HTML中有哪些基础知识点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML中有哪些基础知识点”吧!一、 HTML的基本结构 网页的标题</</div></div><div class="articleBottom"><span class="date" style="float: right;">2023-06-27</span></div><div class="clearboth"></div></div></div></div><div class="hotFlag"><h4>热门标签</h4><div class="flagBox"><a title="Linux" href="/tag/Linux/">Linux(148)</a><a title="PHP" href="/tag/PHP/">PHP(127)</a><a title="Java" href="/tag/Java/">Java(102)</a><a title="正则表达式" href="/tag/正则表达式/">正则表达式(101)</a><a title="JavaScript" href="/tag/JavaScript/">JavaScript(69)</a><a title="最佳实践" href="/tag/最佳实践/">最佳实践(67)</a><a title="jQuery" href="/tag/jQuery/">jQuery(44)</a><a title="MySQL" href="/tag/MySQL/">MySQL(39)</a><a title="Docker" href="/tag/Docker/">Docker(37)</a><a title="C语言" href="/tag/C语言/">C语言(36)</a><a title="性能优化" href="/tag/性能优化/">性能优化(34)</a><a title="Python" href="/tag/Python/">Python(34)</a><a title="XML" href="/tag/XML/">XML(28)</a><a title="string" href="/tag/string/">string(27)</a><a title="第三方库" href="/tag/第三方库/">第三方库(23)</a><a title="回调函数" href="/tag/回调函数/">回调函数(23)</a><a title="ZIP" href="/tag/ZIP/">ZIP(22)</a><a title="数组" href="/tag/数组/">数组(22)</a><a title="可扩展性" href="/tag/可扩展性/">可扩展性(22)</a><a title="字符串比较" href="/tag/字符串比较/">字符串比较(21)</a><a title="find" href="/tag/find/">find(20)</a><a title="RPM" href="/tag/RPM/">RPM(20)</a><a title="Go" href="/tag/Go/">Go(20)</a><a title="grep" href="/tag/grep/">grep(19)</a><a title="ASP.NETCore" href="/tag/ASP.NETCore/">ASP.NETCore(19)</a><a title="XML解析器" href="/tag/XML解析器/">XML解析器(19)</a><a title="事件" href="/tag/事件/">事件(19)</a><a title="事件处理程序" href="/tag/事件处理程序/">事件处理程序(19)</a><a title="StringBuilder" href="/tag/StringBuilder/">StringBuilder(18)</a><a title="Nginx" href="/tag/Nginx/">Nginx(18)</a></div></div></div><div class="main_right fr"><div class="artHotSearch"><h4 class="title"><div class="fl"><span class="icon bg_content bg_icon_rs"></span><span class="name">编程热搜</span></div><a href="" class="fr bg_content bg_txt_rsb"></a><div class="clearboth"></div></h4><ul><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="Python 学习之路 - Python" href="https://www.528045.com/article/52df4d95aa.html">Python 学习之路 - Python</a></span></h5><div class="clearboth"></div><div class="des">一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-</div></div><img class="lazy" data-type="0" data-src="/file/imgs/upload/202301/31/qglhspth11k.jpg" alt="Python 学习之路 - Python" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="chatgpt的中文全称是什么" href="https://www.528045.com/article/6d32547808.html">chatgpt的中文全称是什么</a></span></h5><div class="clearboth"></div><div class="des">chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列</div></div><img class="lazy" data-type="0" data-src="https://static.528045.com/imgs/46.jpg?imageMogr2/format/webp/blur/1x0/quality/35" alt="chatgpt的中文全称是什么" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="C/C++中extern函数使用详解" href="https://www.528045.com/article/9733fb00d0.html">C/C++中extern函数使用详解</a></span></h5><div class="clearboth"></div><div class="des"></div></div><img class="lazy" data-type="0" data-src="/file/upload/202211/13/d3kqhimmpgl.jpg" alt="C/C++中extern函数使用详解" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="C/C++可变参数的使用" href="https://www.528045.com/article/773997944a.html">C/C++可变参数的使用</a></span></h5><div class="clearboth"></div><div class="des">可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃</div></div><img class="lazy" data-type="0" data-src="https://static.528045.com/imgs/2.jpg?imageMogr2/format/webp/blur/1x0/quality/35" alt="C/C++可变参数的使用" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="css样式文件该放在哪里" href="https://www.528045.com/article/617e4312cb.html">css样式文件该放在哪里</a></span></h5><div class="clearboth"></div><div class="des"></div></div><img class="lazy" data-type="0" data-src="https://static.528045.com/imgs/31.jpg?imageMogr2/format/webp/blur/1x0/quality/35" alt="css样式文件该放在哪里" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="php中数组下标必须是连续的吗" href="https://www.528045.com/article/21ee165f7c.html">php中数组下标必须是连续的吗</a></span></h5><div class="clearboth"></div><div class="des"></div></div><img class="lazy" data-type="0" data-src="/upload/jz5euwde0tq.jpg" alt="php中数组下标必须是连续的吗" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="Python 3 教程" href="https://www.528045.com/article/01a1d65257.html">Python 3 教程</a></span></h5><div class="clearboth"></div><div class="des">Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python</div></div><img class="lazy" data-type="0" data-src="/upload/202205/01/jneowzxxjtt.jpg" alt="Python 3 教程" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="Python pip包管理" href="https://www.528045.com/article/ab7f357e04.html">Python pip包管理</a></span></h5><div class="clearboth"></div><div class="des">一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    </div></div><img class="lazy" data-type="0" data-src="/file/imgs/upload/202301/31/qn4pmgvm0lq.jpg" alt="Python pip包管理" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="ubuntu如何重新编译内核" href="https://www.528045.com/article/a65a3a171f.html">ubuntu如何重新编译内核</a></span></h5><div class="clearboth"></div><div class="des"></div></div><img class="lazy" data-type="0" data-src="/file/uploads/202210/26/1sph0pw5wqc.jpg" alt="ubuntu如何重新编译内核" /><div class="clearboth"></div></li><li class="rslist clearfix"><div class="rslist_left fl"><h5><span class="fl name"><a title="改善Java代码之慎用java动态编译" href="https://www.528045.com/article/d085d3bcbe.html">改善Java代码之慎用java动态编译</a></span></h5><div class="clearboth"></div><div class="des"></div></div><img class="lazy" data-type="0" data-src="https://static.528045.com/imgs/6.jpg?imageMogr2/format/webp/blur/1x0/quality/35" alt="改善Java代码之慎用java动态编译" /><div class="clearboth"></div></li></ul><div class="seeMore"><a href="https://www.528045.com/article/program-c4-1.html">查看更多</a></div></div><div class="artSubmit"><h4 class="title"><div class="fl"><span class="icon bg_content bg_icon_yktg"></span><span class="name">编程资源站</span></div><div class="clearboth"></div></h4><ul class="submitNav clearfix"><li class="active first">资料下载</li><li>历年试题</li></ul><div class="submitBox active"><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021年下半年软考高级信息系统项目管理师高频考点" href="https://www.528045.com/down/89bb6.html">2021年下半年软考高级信息系统项目管理师高频考点</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考高级信息系统技术知识点记忆口诀" href="https://www.528045.com/down/7d690.html">2021下半年软考高级信息系统技术知识点记忆口诀</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考《信息系统项目管理师》考试真题及答案" href="https://www.528045.com/down/4277a.html">2021下半年软考《信息系统项目管理师》考试真题及答案</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考高级考试备考攻略" href="https://www.528045.com/down/9248a.html">2021下半年软考高级考试备考攻略</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021年软考高级《信息系统项目管理师》巩固练习题汇总" href="https://www.528045.com/down/fcca0.html">2021年软考高级《信息系统项目管理师》巩固练习题汇总</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考高级信息系统项目管理师30个易考知识点汇总" href="https://www.528045.com/down/7636b.html">2021下半年软考高级信息系统项目管理师30个易考知识点汇总</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考高级知识点这样记,还担心记不住吗" href="https://www.528045.com/down/76382.html">2021下半年软考高级知识点这样记,还担心记不住吗</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021年下半年软考高级考试重点汇总" href="https://www.528045.com/down/15f44.html">2021年下半年软考高级考试重点汇总</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021下半年软考高级信息系统项目管理师计算公式汇总" href="https://www.528045.com/down/2d560.html">2021下半年软考高级信息系统项目管理师计算公式汇总</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2021年下半年软考高级《信息系统项目管理师》模拟试题" href="https://www.528045.com/down/c0085.html">2021年下半年软考高级《信息系统项目管理师》模拟试题</a><span class="hot"><a href="https://www.528045.com/down/ziliao-c69-1.html">精选资料</a></span></h5></div><div class="seeMore"><a href="/down/">查看更多</a></div></div><div class="submitBox"><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="信息系统项目管理师选择题每日一练(2024)" href="https://www.528045.com/article/6d5f303202.html">信息系统项目管理师选择题每日一练(2024)</a><span class="hot"><a href="https://www.528045.com/article/lnst-c57-1.html">历年试题</a></span></h5></div><div class="submitItem"><span class="turn"></span><h5 class="title"><a title="2023年下半年信息系统项目管理师综合知识真题演练" href="https://www.528045.com/article/f2da969d4f.html">2023年下半年信息系统项目管理师综合知识真题演练</a><span class="hot"><a href="https://www.528045.com/article/lnst-c57-1.html">历年试题</a></span></h5></div><div class="seeMore"><a href="https://www.528045.com/article/lnst-c57-1.html">查看更多</a></div></div></div><div class="meumfie"><h4 class="title"><div class="fl"><span class="icon bg_content bg_icon_ykzl"></span><span class="name">目录</span></div><div class="clearboth"></div></h4><div class="toc"></div></div></div><div class="clearboth"></div></div><script type="text/javascript" src="/skin/static/js/toc.js"></script><div class="popUp popDelay"><div class="maskBg"></div><div class="popCon"><span class="btn btn_close"></span><div class="tip"> 本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页 </div><div class="delayMain"><div class="delaymain_left"><a href="https://www.528045.com"><img src="https://static.528045.com/skin/content_left.png?imageMogr2/format/webp/blur/1x0/quality/35"></a></div><div class="delaymain_right"><div class="news_title"><span class="fl">最新资讯</span ><a href="/" class="fr">更多</a><div class="clearboth"></div></div><ul></ul></div><div class="clearboth"></div></div><div class="bigshow"><a href="https://www.528045.com"><img src="https://static.528045.com/skin/content_bottom.png?imageMogr2/format/webp/blur/1x0/quality/35"></a></div></div></div><div class="footer"><div class="friendLink"><span class="friendTitle">友情链接</span><a href="https://www.lsjlt.com">编程网</a></div><script type="text/javascript" src="/skin/static/js/footermain.js"></script></div><div class="popCommon"><span class="mask"></span><div class="popCon"></div></div><div class="ajaxrightbtn"><div class="funBtnbox"><div class="rb_fk rb_ty br_bom"><div class="wx_mo1 _mo1"><i class="dtmuban-iconfont icon-fankui2"></i><p>反馈</p></div><a href="javascript:void(0);" onclick="Dsb('urs-form-modalfk');"><div class="_mo2 rb_gradient br_bom"><p>我要<br>反馈</p></div></a></div></div><div class="fbs fbs-gotp back2top" style="display: none;"><div class="rb_top rb_ty br_all"><div class="top_mo1 _mo1 "><i class="dtmuban-iconfont icon-zhiding"></i></div><a href="javascript:void(0);" title="返回顶部"><div class="_mo2 rb_gradient br_all"><p>返回<br>顶部</p></div></a></div></div></div><div id="urs-form-modalfk-bg" class="urs-form-modal-bg" style="display: none;"></div><div id="urs-form-modalfk" class="urs-form-modal" style="display: none;"><div class="urs-form-component plan-get-form-mini js-apply-form clearfix"><div class="urs-component-head"><div class="icon-close" onclick="Dhb('urs-form-modalfk');"><img id="close-btn" src="https://static.528045.com/skin/ic_delete_normal_24px.png"></div><p class="form-title">留言反馈</p><p></p><p class="form-line"></p></div><div class="urs-component-tab"><h5>感谢您的提交,我们服务专员将在<span>30分钟内</span>给您回复</h5><div class="get-plan-form-item"><i class="u-item-icon dtmuban-iconfont icon-fanganguihua"></i><input class="u-input js-apply-phone" type="text" id="titleb" name="titleb" value="我要反馈留言,看到请回复" placeholder="留言标题"><span id="dtitlea"></span></div><div class="get-plan-form-item"><select name="typeidb" id="typeidb" class="u-select"><option value="">请选择类型</option><option value="0">问题反馈</option><option value="1">意见建议</option><option value="2">倒卖举报</option><option value="3">不良信息</option><option value="4">其他</option></select></div><div class="get-plan-form-item"><i class="u-item-icon dtmuban-iconfont icon-yonghu"></i><input class="u-input js-apply-name" type="text" id="truenameb" name="truenameb" placeholder="您的姓名" value=""><span id="dtruenameb"></span></div><div class="get-plan-form-item"><i class="u-item-icon dtmuban-iconfont icon-liuyan"></i><input class="u-input js-apply-phone" type="text" id="emailb" name="emailb" placeholder="您的邮箱" value=""><span id="demailb"></span></div><div class="get-plan-form-item"><i class="u-item-icon dtmuban-iconfont icon-shouji"></i><input class="u-input js-apply-phone" type="text" id="telephoneb" name="telephoneb" placeholder="您的手机" value=""><span id="dtelephoneb"></span></div><div class="get-plan-form-item"><i class="u-item-icon dtmuban-iconfont icon-liuyan2"></i><textarea class="u-textarea js-apply-content" id="contentb" name="contentb" placeholder="留言说明,文字为2-100字" value=""></textarea><span id="dcontentb"></span></div><button type="submit" name="submit" class="btn btn-red" onclick="checkaguestbook();">立即提交</button></div></div></div><style> .drop_more li{ list-style: none;} </style><script type="text/javascript" src="/file/script/config.js"></script><script type="text/javascript" src="/file/script/common.js"></script><script type="text/javascript" src="/skin/static/js/commonpop.js"></script><script type="text/javascript" src="/skin/static/js/header.js"></script><script type="text/javascript" src="/skin/static/js/footer.js"></script><script type="text/javascript" src="/skin/static/js/listconcommon.js"></script><script src="/skin/static/layui/layui.js" type="text/javascript"></script><script src="/skin/static/js/custom-script.js" type="text/javascript"></script><script src="/skin/static/js/indexsms.js?v=20240108.1443"></script><script type="text/javascript"> $(function(){ var destoon_userid = 0,destoon_username = '',destoon_member = destoon_guest = ''; destoon_guest = '<div class="login-li"><a href="javascript:void(0);" lay-on="showLoginPopup" class="a_on_dl" id="dn-login">请登录</a></div><div class="login-li"><a href="javascript:void(0);" lay-on="showLoginPopup" class="a_to">免费注册</a></div>'; destoon_member += destoon_guest; $('#m52_member').html(destoon_member); }); </script></body></html><script type="text/javascript" src="/skin/static/js/contentie.js"></script>