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

企业做网站推广全球外贸采购网

企业做网站推广,全球外贸采购网,wordpress图像大小设置,国内优秀公司网站头文件 一. 对终端的操作相关头文件#include 1. 输入istream2. 输出ostream3. iostream继承istream和ostream 所以它具有输入输出功能。为了方便这个库定义了下列三个标准流对象#xff1a;1. cin 代表标准输入istream类对象一般地cin使我们能够从用户终端读入数据。2. cout …头文件 一. 对终端的操作相关头文件#include 1. 输入istream2. 输出ostream3. iostream继承istream和ostream 所以它具有输入输出功能。为了方便这个库定义了下列三个标准流对象1. cin  代表标准输入istream类对象一般地cin使我们能够从用户终端读入数据。2. cout 代表标准输出ostream类对象一般地cout使我们能够向用户终端写数据。3. cerr 代表标准错误ostream类对象一般地cerr是导出程序错误消息的地方。另外,输出主要由重载的左移操作符 来完成类似地输入主要由重载的右移操作符来完成。Demo1#include #include int main() {string in_string;// 向用户终端写字符串std::cout Please enter your name:;// 把用户输入的读取到 in_string 中std::cin in_string;if ( in_string.empty() )// 产生一个错误消息输出到用户终端std::cerr error: input string is empty!\n;else std::cout hello, in_string !\n;}二. 对文件的操作相关头#include 1. ifstream 从istream 派生把一个文件绑到程序上从文件读取数据用来输入。2. ofstream 从ostream 派生把一个文件绑到程序上用来向文件写入数据。3. fstream 从iostream 派生把一个文件绑到程序上用来输入和输出。注由于在fstream 头文件中也包含了iostream 头文件所以我们不需要同时包含这两个文件C对于文件的输入输出也支持同样的输入和输出操作符。Demo2#include #include #include #include int main(){string ifile;cout Please enter file to sort:;cin ifile;// 构造一个 ifstream 输入文件对象ifstream infile( ifile.c_str() );if( ! infile ) {cerr error: unable to open input file: ifile endl;return -1;}string ofile ifile .sort;// 构造一个 ofstream 输出文件对象ofstream outfile( ofile.c_str() );if( !outfile ) {cerr error: unable to open output file: ofile endl;return -2;}string buffer;vector text;int cnt 1;while ( infile buffer ) {text.push_back( buffer );cout buffer ( cnt % 8 ? : \n );}sort( text.begin(), text.end() );// ok: 把排序后的词打印到 outfilevector::iterator iter text.begin();for ( cnt 1; iter ! text.end(); iter, cnt )outfile *iter (cnt%8 ? : \n );return 0;}三. 对字符流操作相关的头文件#include 1 istringstream 从istream 派生从一个字符串中读取数据。2 ostringstream 从ostream 派生写入到一个字符串中。3 stringstream 从iostream 派生从字符串中读取或者写入到字符串中。Demo3#include string program_name( our_program );string version( 0.01 );// ...string mumble( int *array, int size ){if ( ! array ) {ostringstream out_message;out_message error: program_name -- version : __FILE__ : __LINE__ must address some array.\n;// 返回底层 string 对象return out_message.str();}四. wchar_t型支持wchar_t类型的流读写操作wcin wcout wcerr wiostream 等等....20.1 输出操作符1. 支持所有的内置数据类型 包括string const char* 和complex。以及函数的调用。2. endl等价于输出换行操作符然后再刷新缓存区。cout \n flush;3. 4. cout p i endl;会输出指针的地址(p是int *,i是int)。如果是const char * pcStr不会输出指针地址值输出的是字符串。转换为cout static_cast(const_cast(pcStr));5. 6. ostream_iterator和cout的使用。Demo4#include #include #include #include string pooh_pals[] {Tigger, Piglet, Eeyore, Rabbit};int main(){vector ppals( pooh_pals, pooh_pals4 );vector::iterator iter ppals.begin();vector::iterator iter_end ppals.end();cout These are Poohs pals:;// 把每个元素拷贝到 cout ...ostream_iterator string output( cout, );copy( iter, iter_end, output );cout endl;}7. cout 遇到‘\0’会定制输出。20.2 输入操作符1. while(cin 变量)的时候有两种情况会让循环停止(false)(1) 读到文件结束在这种情况下我们已经正确地读完文件中所有的值。(2) 遇到一个无效的值比如3.14159小数点是非法的1e-1字符文字e是非法的或者一般的任意字符串文字在读入一个无效值的情况下istream对象被放置到一种错误的状态中并且对于值的所有读入动作都将停止。2. 预定义的输入操作符可以接受任何的内置数据类型包括C 风格字符由以及标准库string和complex 类类型。3. 缺省情况下输入操作符丢弃任何中间空白空格制表符换行符走纸以及回车。Demo5:#include #include int main(){int item_number;string item_name;double item_price;cout Please enter the item_number, item_name, and price: endl;cin item_number;cin item_name;cin item_price;cout The values entered are: item# item_number item_name $ item_price endl;}4. 如果希望读入空白符号可以利用cin.get()方法一个个读入或者设置skipws和noskipws选项(后面介绍)。5. isream_iterator和cin关联使用。Demo6:#include #include #include #include int main(){istream_iterator string in( cin ), eos ;vector string text ;// 从标准输入向 text 拷贝值copy( in , eos , back_inserter( text ) ) ;sort( text.begin() , text.end() ) ;// 删除所有重复的值vector string ::iterator it ;it unique( text.begin() , text.end() ) ;text.erase( it , text.end() ) ;// 显示结果 vectorint line_cnt 1 ;for ( vector string ::iterator iter text.begin();iter ! text.end() ; iter , line_cnt )cout *iter ( line_cnt % 9 ? : \n ) ;cout endl;}20.2.1 字符串输入1. setw函数防止读入字符串益处(char[4],输入4个以上字节)while ( cin setw( bufSize ) buf )这里bufSize是字符数组buf的长度setw()把长度等于或大于bufSize 的字符串分成最大长度为bufSize - 1的两个或多个字符串在每个新串的末尾放一个空字符为了使用setw()要求程序包含iomanip头文件#include 。2. 用string没有char *那些长度和内存溢出问题更容易使用。20.3 其他输入输出操作符一. istream的成员get()一次读入一个字节。属于istream1. get(char ch)从输入流中提取一个字符包括空白字符并将它存储在ch中它返回被应用的istream对象。与之对应的是ostream的put()方法每次读入一个字节然后返回ostream。2. get()的第二个版本也从输入流读入一个字符区别是它返回该字符值而不是被应用的istream 对象它的返回类型是int 而不是char 因为它也返回文件尾的标志end-of-file该标志通常用-1 来表示以便与字符集区分开为测试返回值是否为文件尾我们将它与iostream 头文件中定义的常量EOF 做比较。Demo7:#include int main(){int ch;// 或使用:// while (( ch cin.get() ) ch ! EOF)while (( ch cin.get()) ! EOF)cout.put(ch);return 0;}3. get(char *sink, streamsize size, char delimiter\n)(1) sink 代表一个字符数组用来存放被读取到的字符。(2) size 代表可以从istream 中读入的字符的最大数目。(3) delimiter 表示如果遇到它就结束读取字符的动作delimiter 字符本身不会被读入而是留在istream 中作为istream 的下一个字符一种常见的错误是在执行第二个get()之前忘了去掉delimiter。二. ignore( streamsize length 1, int delim traits::eof )函数: 属于istream我们用istream 成员函数ignore()来去掉delimiter缺省情况下换行符被用作delimiter。三. gcount()函数: 属于istream它返回由最后的get()或getline()调用实际提取的字符数。Demo8:#include int main(){const int max_line 1024;char line[ max_line ];while ( cin.get( line, max_line )){// 最大读取数量 max_line - 1, 也可以为 nullint get_count cin.gcount();cout characters actually read: get_count endl;// 处理每一行// 如果遇到换行符// 在读下一行之前去掉它if ( get_count max_line-1 )cin.ignore();}}四. getline(char *sink, streamsize size, char delimiter\n)属于istream五. write( const char *sink, streamsize length )属于ostream提供了另外一种方法可以输出字符数组”它不是输出直到终止空字符为止的所有字符“而是输出某个长度的字符序列包括内含的空字符它的函数。length 指定要显示的字符个数write()返回当前被调用的ostream 类对象。六. read( char* addr, streamsize size )属于istreamread()从输入流中提取size 个连续的字节并将其放在地址从addr 开始的内存中gcount()返回由最后一个read()调用提取的字节数而read()返回当前被调用的istream 类对象。Demo9:#include int main(){const lineSize 1024;int lcnt 0; // 读入多少行int max -1; // 最长行的长度char inBuf[ lineSize ];// 读取 1024 个字符或者遇到换行符while (cin.getline( inBuf, lineSize )){// 实际读入多少字符int readin cin.gcount();// 统计: 行数最长行lcnt;if ( readin max )max readin;cout Line # lcnt \tChars read: readin endl;cout.write( inBuf, readin).put(\n).put(\n);}cout Total lines read: lcnt endl;cout Longest line read: max endl;}七. getline( istream is, string str, char delimiter );这个getline()实例的行为如下读入最大数目为str::max_size-1 个字符如果输入序列超出这个限制则读操作失败并且istream 对象被设置为错误状态否则当读到delimiter 它被从istream 中丢弃但没有被插入到string 中或遇到文件结束符时输入结束。八. putback( char c ); 将字符放回 iostream。九. unget();往回重置下一个 istream 项。十. peek(); 返回下一个字符或 EOF但不要提取出来。Demo10:char ch, next, lookahead;while ( cin.get( ch )){switch (ch) {case /:// 是注释行吗? 用 peek() 看一看:// 是的? ignore() 余下的行next cin.peek();if ( next / )cin.ignore( lineSize, \n );break;case :// 查找 next cin.peek();if ( next ) {lookahead cin.get();next cin.peek();if ( next ! )cin.putback( lookahead );}20.4 重载输出操作符输出操作符是一个双目操作符它返回一个ostream 引用重载定义的通用框架如下// 重载 output 操作符的通用框架ostreamoperator {// 准备对象的特定逻辑// 成员的实际输出os // ...// 返回 ostream 对象return os;}注因为第一个实参是一个ostream 引用所以输出操作符必须定义为非成员函数当输出操作符要求访问非公有成员时必须将它声明为该类的友元。20.5 重载输入操作符1 由于不正确的格式而导致失败istream 应该把状态标记为fail。setstate( ios_base::failbit )。2 对于错误状态中的iostream 插入和提取操作没有影响。Demo11:#include #include WordCount.h/* 必须修改 WordCount, 指定输入操作符为友元class WordCount {friend ostream operatorfriend istream operator( istream, WordCount );*/istreamoperator( istream is, WordCount wd ){/* WordCount 对象被读入的格式:* 2 string* 7,3 12,36*/int ch;/* 读入小于符号, 如果不存在* 则设置 istream 为失败状态并退出*/if ((ch is.get()) ! {is.setstate( ios_base::failbit );return is;}// 读入多少个int occurs;is occurs;// 取 ; 不检查错误while ( is (ch is.get()) ! );is wd._word;// 读入位置// 每个位置的格式: line, col for ( int ix 0; ix occurs; ix ){int line, col;// 提取值while (is (ch is.get())! is line;while (is (ch is.get())! , );is col;while (is (ch is.get())! );wd.occurList.push_back( Location( line, col ));}return is;}20.6 文件输入和输出包含头文件#include 1. ofstream的构造函数要制定打开模式输出模式ios_base::out 或附加模式ios_base::app 等等。在缺省情况下ostream文件以输出模式打开。注如果在输出模式下打开已经存在的文件则所有存储在该文件中的数据都将被丢弃如果我们希望增加而不是替换现有文件中的数据则应该以附加模式打开文件于是新写到文件中的数据将添加到文件尾部在这两种模式下如果文件不存在程序都会创建一个新文件。2. 判断是否打开if (!outFile /*ofstream对象*/)3. 因为ofstream派生于ostream所以ofstream拥有ostream的操作比如put()等等。4. 自定义5. 用ifstream读入一个文件派生于istream所有拥有istream的操作比如get()等等。6. close()函数断开和文件的关联。7. fstream派生于iostream它具有对文件的读写操作。8. seekg和seekp标记当前位置g是在读文件中使用p再写文件中使用。注第二个参数标示定位标记:(1) ios_base::beg 文件的开始(2) ios_base::cur 文件的当前位置(3) ios_base::end 文件的结尾9. tellg()或tellp()返回当前位置g和p意义同seekg和seekp。返回值是ios_base::pos_type。10. clear()函数:清除状态。20.7 条件状态一. 条件状态1 如果一个流遇到文件结束符则eof()返回true。2 如果试图做一个无效的操作比如seeking 重定位操作超出了文件尾则bad()返回true一般地这表示该流由于某种未定义的方式而被破坏了。3 如果操作不成功比如打开一个文件流对象失败或遇到一种无效的输入格式则fail()返回true 例如ifstream iFile( filename, ios_base::in );if ( iFile.fail() ) // 不能打开error_message( ... );4 如果其他条件都不为true 则good()返回true二. 改变状态1. clear()函数状态变为显示。2. setstate()函数添加状态。参数设置为ios_base::badbitios_base::eofbitios_base::failbitios_base::goodbit3. rdstate()获取成员状态返回值ios_base::iostate。20.8 string 流1. 包括头文件#include 2. str()返回与ostringstream 类对象相关联的string 对象。20.9 格式状态操 作 符                    含 义boolalpha               把true 和false 表示为字符串*noboolalpha            把true 和false 表示为0 1showbase                产生前缀指示数值的进制基数*noshowbase             不产生进制基数前缀showpoint               总是显示小数点*noshowpoint            只有当小数部分存在时才显示小数点Showpos                 在非负数值中显示*noshowpos              在非负数值中不显示*skipws                 输入操作符跳过空白字符noskipws                输入操作符不跳过空白字符uppercase               在十六进制下显示0X 科学计数法中显示E*nouppercase            在十六进制下显示0x 科学计数法中显示e*dec                    以十进制显示hex                     以十六进制显示oct                     以八进制显示left                    将填充字符加到数值的右边right                   将填充字符加到数值的左边Internal                将填充字符加到符号和数值的中间*fixed                  以小数形式显示浮点数scientific              以科学计数法形式显示浮点数flush                   刷新ostream 缓冲区ends                    插入空字符然后刷新ostream 缓冲区endl                    插入换行符然后刷新ostream 缓冲区ws                      吃掉 空白字符// 以下这些要求 #include setfill(ch)            用ch 填充空白字符setprecision(n)        将浮点精度设置为nsetw(w)                按照w 个字符来读或者写数值setbase(b)             以进制基数b 输出整数值注*表示缺省的流状态20.10 强类型库iostream库是强类型的例如试图从一个ostream 读数据或者写数据到一个istream都会在编译时刻被捕获到并标记为类型违例。posted 2011-03-03 08:37 xi52qian 阅读(222) | 评论 (0) | 编辑 收藏3.1 什么是内核对象内核对象就是内核中的一块内存是一个结构并且只能由内核对象访问应用程序只能通过调用Windows提供的函数来操作内核对象。每个内核对象都有相同的部分比如安全属性和使用计数器。3.1.1 内核对象的使用计数内核对象中的使用计数和进程无关当进程第一次创建某个内核对象时候使用计数变为1当另一个进程也调用此内核对象时计数变为2。当进程释放时或者关闭内核对象时(CloseHandle)内核的使用计数减去1如果使用计数不为0的话内核不会释放此内核对象。3.2.2 安全性内核对象能够得到安全描述符的保护安全描述符定义了谁能够创建访问和使用该对象一般在服务器代码中使用客户端可以忽略。所有创建内核对象的函数的参数都有一个指向SECURITY_ATTRIBUTES结构的指针。typedef struct _SECURITY_ATTRIBUTES {DWORD nLength;LPVOID lpSecurityDescriptor;BOOL bInheritHandle;} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;只有lpSecurityDescriptor成员和安全属性有关。一般此参数传递NULL表示默认的安全描述。如果需要SECURITY_ATTRIBUTES sa;sa.nLength sizeof(sa);sa.lpSecurityDescriptor NULL;sa.bInheritHandle FALSE;HANDLE h CreateMutex(sa, FALSE, XI);其余进程可用用OpenMutex函数打开如果权限可以就返回句柄如果失败返回NULLGetLastError被设置为ERROR_ACCESS_DENIED。Windows除了内核对象之外还有GDI和用户对象区分它们的简单办法就是创建函数中带有安全描述符参数的就是内核对象。3.2 进程的内核对象句柄表索引                         内核对象内存块得指针                             访问屏蔽(标志位的DWORD)                      标志(标志位的DWORD)1                               0x????????                                                0x????????                                                        0x????????2                               0x????????                                                0x????????                                                        0x????????…                               …                                                               …                                                                       …3.2.1 创建内核对象调用Create函数族来创建相应的内核对象返回的是内核对象的句柄(也有个说法就是句柄表的索引),如果创建失败一般会返回0(NULL)也有的会返回INVALID_HANDLE_VALUE-1比如CreateFile失败后会返回后者失败的原因有可能是内存不足或者是安全问题等等。其他对内核操作的函数都需要此句柄值作为参数传递进去如果传递一个无效的句柄进去那么GetLastError函数的值将被置为6(ERROR_INVALID_HANDLE)。3.2.2 关闭内核对象BOOL CloseHandle(HANDLE hobj);调用此函数系统会了清理进程的句柄表中的对应项目如果使用计数器为0内核释放该内核对象的资源如果使用计数器不为0说明其他进程还在使用此内核对象则不释放资源。当进程忘记调用CloseHandle函数可能造成内存泄露但是当进程结束的时候资源一样会被释放。如果传递的参数无效则函数返回FALSE并且GetLastError函数的值被设置成ERROR_INVALID_HANDLE。如果是DEBUG阶段则返回错误信息。3.3 跨越进程边界共享内核对象3.3.1 对象句柄的继承性在父进程创建子进程的时候将参数SECURITY_ATTRIBUTES结构的Inherithandle字段设置为TRUE的话再父进程句柄表中标示该内核对象的项的标志位的值将会变成TRUE标示该内核对象是可以让子进程继承的具有可继承性(仅仅标示 该句柄值具有可继承性而内核对象没有可继承性)。将CreateProcess的参数bInherithandle参数的值设置为TRUE标示创建的进程可以继承有继承性的父进程句柄。子进程创建后不会先加载程序它先搜索父进程的句柄表将有继承性的项目原封不动的拷贝给自己(索引也没有变所以句柄值也不变)。父进程可以有3种方式将句柄值传递给子进程参数传递进程间通信和环境变量(GetEnvironmentVariavle函数解析)。BOOLWINAPICreateProcess(__in_opt LPCSTR lpApplicationName,__inout_opt LPSTR lpCommandLine,__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,__in BOOL bInheritHandles,__in DWORD dwCreationFlags,__in_opt LPVOID lpEnvironment,__in_opt LPCSTR lpCurrentDirectory,__in LPSTARTUPINFOA lpStartupInfo,__out LPPROCESS_INFORMATION lpProcessInformation);注意子进程再创建其子进程如果满足上面方式可以继续继承。如果父进程再创建子进程后再创建句柄子进程不会被继承。3.3.2 改变句柄标志BOOL SetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags);改变句柄的标志目前可改变的标志有两种#define HANDLE_FLAG_INHERIT   0x00000001  // 继承标志#define HANDLE_FLAG_PROJECT_FROM_CLOSE   0x00000001 // 保护不允许关闭句柄标志可以用OR操作同时设置2个标志。第一个参数是要设置的句柄值第二个就是要改变的标志第三个参数是将标志改编成什么值。BOOL GetHandleInformation(HANDLE hObkect, PDWORD pdwFlags);获取当前句柄的标志的值。// 设置句柄值可继承SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);// 设置句柄不可继承SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, 0);// 设置句柄值不可关闭受保护SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, HANDLE_FLAG_PROJECT_FROM_CLOSE);// 设置句柄值可关闭不受保护SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, 0);3.3.3 命名对象创建内核对象函数族Create中的最后一个参数是pszName该参数是如果传递NULL表示是匿名内核对象可以通过其他俩种方式来使用其他进程的内核对象。当pszName参数传递以’\0’(最多长度为MAX_PATH 260字符)结尾的字符串时表示启用命名对象比如进程A调用CreateMutex(NULL, FALSE, “XI”)的时候他将创建内核对象名字为“XI”之后某一时刻如果进程B也调用CreateMutex(NULL, FALSE, “XI”)函数他将经过以下几步判断内核对象名称是否相同。判断内核对象类型是否相同如果名字相同但是类型不相同则Create函数族返回NULLGetLastError函数值为6(ERROR_INVALID_HANDLE)。判断安全性返回同2步GetLastError值同2步。如果验证通过则返回句柄(返回句柄的值和该内核对象其他句柄的值不一定相同)GetLastError的值等于ERROR_ALREADY_EXISTS。也可以用Open函数族来打开已经创建的句柄成功后GetLastError也不会被设置。具体如下HANDLE Open(DWORD, BOOL, PCSTR);第一个参数表示访问权限。第二个参数表示新创建的句柄是否有继承性(注意不是内核对象)。第三个参数不能传递NULL。如果该句柄不存在则返回NULLGetLastError被设置为2(ERROR_FILE_NOT_FOUND)。3.3.4 终端服务器的名字空间GlobadLocalSession程序保留关键字具体的没弄明白理解的就是说当服务器的时候客户端可以访问以这些名字开头的内核对象。3.3.5 复制对象句柄BOOL DuplicateHandle(HANDLE hSourceProcessHandle,HANDLE hSourceHandle,HANDLE TargetProcessHandle,PHANDLE phTargetHandle,DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwOptions);执行DuplicateHandle函数的进程为ProcessC原进程为ProcessS目标进程为ProcessT。则hSourceProcessHandle为进程ProcessS的进程句柄TargetProcessHandle为进程ProcessT的进程句柄ProcessC将句柄hSourceHandle从ProcessC拷贝到ProcessT中值存在phTargetHandle中dwDesiredAccess新句柄的反问权限bInheritHandle新句柄的继承性参数dwOptions有两种类型分别是DUPLICATE_SAME_ACCESS忽略参数dwDesiredAccess新句柄和原进程句柄具有相同的反问权限。DUPLICATE_CLOSE_SOURCE关闭ProcessS中的拷贝句柄内核对象的计数不变。HANDLE hObjProcessS CreateMutex(NULL, FALSE, NULL);HANDLE hProcessT OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessIdT);HANDLE hObjProcessT;DuplicateHandle(GetCurrentProcess(), hObjProcessS, hProcessT , hObjProcessT, 0, FALSE, DUPLICATE_SAME_ACCESS);CloseHandle(hObjProcessS);CloseHandle(hProcessT);注意一般DuplicateHandle函数没有在三个进程中使用因为很难知道原进程的句柄值。要使用IPC机制通知目标进程新句柄已经拷贝过去。posted 2011-03-03 08:35 xi52qian 阅读(197) | 评论 (1) | 编辑 收藏
http://wiki.neutronadmin.com/news/391750/

相关文章:

  • 如何做网站编辑 沒技术html5基础知识
  • 典型的网站开发人员珠海公司网站域名注册
  • 大淘客cms网站怎么做上海有限公司有哪些
  • 各大网站的软文怎么做湖南省建设厅纪检组长
  • 网站建设进度表怎么做2018年临沂建设局网站
  • 渝中集团网站建设注册公司找黄牛一般多少钱
  • 官方网站建设银行年利息是多少钱wordpress和discuz织梦
  • 郑州网站建设e00网站网站制作网
  • 建设一个网站需要哪些免费域名分发系统
  • 南通智能模板建站如何成为一名设计师
  • 0资本建设网站wordpress 7牛
  • 网站meta网页描述大连网站设计哪里有做
  • 电子商务网站建设与管理课后网站改版公司
  • 网站屏蔽搜索引擎阿里云服务器如何上传网站
  • 设置网站关键词建设人行官方网站
  • 旅游网站策划书常德论坛市民留言板
  • 提高网站流量的软文案例安徽振兴集团网站开发
  • asp网站开发有前景吗中国最好的室内设计公司
  • 国际电子商务网站建设连云港网站制作
  • 辽宁网站建设招标杭州app建设
  • 中山网站的建设网站开发综合实训报告
  • 俄罗斯女孩制作论文网站网站开发三大流行语言
  • 怎样在赶集微网站做微招聘信息wordpress导入sql失败
  • 商务网站建设 模板做网站公司哪家公司好
  • 惠城东莞网站建设网站建设招聘信息
  • 自己能不能做个网站wordpress中文验证码
  • 中国建设银行北京天竺支行网站怎么在百度上创建网站
  • 网站 目标wordpress主题安装后
  • 企业网站展示织梦网站转移
  • 广州黄埔区做网站培训机构甘肃网站开发企业