发布一个简单点的ASP摸板类...

呵呵,其实这个写了都挺久的了,看看里面的日期就知道了,只不过一直不想发布出来,这次在做一个小型的论坛,就把原来自己的的那个复杂的摸板引擎修改了一翻拿来用,因为把ASP代码和HTML代码分离了开来,所以论坛是可以变换风格,在用这个摸板引擎的过程中发现了它功能上还是有点不足,就是在循环标签替换上,不过如果结合数组可以轻松实现的,呵呵,具体用法暂且不说了...等有时间再把教程写出来


<Script Language="vbscript" Runat="Server">

'--------------------------------------
'版权说明:
'Author:西楼冷月
'Date:2005-8-21
'HomeSite: www.xilou.Net   |-西楼社区-|    //    www.chinaCMS.org
'E-Mail:ch_56@163.com
'QQ:39949376   CMS讨论群:11497202
'version:西楼模板引擎V1.0精简版 XILOU-EasyTemplate v1.0
'--------------------------------------
'函数说明:
'Set_Block(BlkName)
'Set_Bvar(TagName,TagValue)
'Prase_Block(BlkName,BlkList)
'Replace_Block(BlkNameList)
'Set_Var(TagName,TagValue)
'Prase_Temp()
'OutPut()
'--------------------------------------
'变量说明:
'Key(),Value(),Num'//--------单标签保存数组
'BKey(),BValue(),BNum'//--------区块内单标签保存数组
'Temp'//----------模板全局变量
'BeginBlockStart,BeginBlockEnd,EndBlockStart,EndBlockEnd'//----------区块标签设置
'VarBegin,VarEnd'//------------单标签设置
'Re,Match,Mathes
'--------------------------------------
'集合说明:
'Block '//保存替换后的区块内容
'Block_List '//取出区块,保存区块内内容
'BlockNC '//取出区块,保存包括区块标签的整个区块内容
'---------------------------------------

On Error Resume Next

Class EasyTemplate

Private Key(),Value(),Num
Private BKey(),BValue(),BNum  
public   Block,Block_List,BlockNC
Public   Temp
Private BeginBlockStart,BeginBlockEnd,EndBlockStart,EndBlockEnd
Private VarBegin,VarEnd
Private Re,Match,Mathes
'--------------------------------------------------------
Private Sub Class_Initialize
'response.write "西楼模板引擎开始了,哈哈!<br>"
set Block         =CreateObject("Scripting.Dictionary")  '追加内容,更新内容
set Block_List =CreateObject("Scripting.Dictionary")  '储存区块内容
set BlockNC    =CreateObject("Scripting.Dictionary")'//储存包括区块标签的区块内容
set re=New RegExp

redim Key(20)
redim Value(20)
Num=0
redim BKey(20)
redim BValue(20)
BNum=0
redim PBblockName(20)
BlockNum=0
'------------默认标签模式------------
BeginBlockStart="<beginblock:"
BeginBlockEnd=">"
EndBlockStart="<endblock:"
EndBlockEnd=">"
VarBegin="{Tag:"
VarEnd="}"

End Sub

Private Sub Class_Terminate
set Block=nothing
set Block_List=nothing
set BlockNC=nothing
set re=nothing

Erase Key
Erase Value
Erase BKey
Erase BValue
'response.write "西楼模板引擎结束了!"
End Sub

'-------------------------------------------------------
Public Property Let SetTag(BS,BE,ES,EE,BG,ED)'//--------重新设置标签模式
BeginBlockStart= BS
BeginBlockEnd=BE
EndBlockStart=ES
EndBlockEnd=EE
VarBegin=BG
VarEnd=ED
End Property

'-------------------------------------------------------
Public Sub Set_Var(TagName,TagValue)   '单标签解析
dim k
   if IsArray(TagName) and IsArray(TagValue) then
      for k=LBound(TagName) to Ubound(TagName)
         Key(Num)=TagName(k)
     Value(Num)=TagValue(k)
     Num=Num+1
     if UBound(Key)=Num then   '如果数组太小则动态分配空间
        redim preserve Key(Num+20)
                  redim preserve Value(Num+20)
     end if
      next
   else
      Key(Num)=TagName
      Value(Num)=TagValue
      Num=Num+1
      if UBound(Key)=Num then
         redim preserve Key(Num+20)
         redim preserve Value(Num+20)
      end if
   end if
End Sub

Public Sub Prase_Temp()'//------------单标签替换
dim i
   for i=LBound(Key) to UBound(Value)
        Temp=replace(Temp,VarBegin&Key(i)&VarEnd,Value(i))
   next
End Sub 

'===============区块解析============================
Public Sub Set_BVar(TagName,TagValue)   '区块内单标签解析
dim k
   if IsArray(TagName) and IsArray(TagValue) then
      for k=LBound(TagName) to Ubound(TagName)
         BKey(BNum)=TagName(k)
         BValue(BNum)=TagValue(k)
         BNum=BNum+1
     if UBound(BKey)=BNum then   '如果数组太小则动态分配空间
        redim preserve BKey(BNum+20)
            redim preserve BValue(BNum+20)
     end if
      next
   else
      BKey(BNum)=TagName
      BValue(BNum)=TagValue
      BNum=BNum+1
      if UBound(BKey)=BNum then
         redim preserve BKey(BNum+20)
         redim preserve BValue(BNum+20)
      end if
   end if
End Sub

Public Sub Set_Block(blkname)    '设置区块,取出区块内容
re.Global=true
re.IgnoreCase=true
re.Pattern=BeginBlockStart&blkname&BeginBlockEnd&"([/s/S.]*?)"&EndBlockStart&blkname&EndBlockEnd
set matches=re.Execute(Temp)
BlockNC.Add blkname,matches(0)'//建立整个区块名称和对应的键值
match=matches(0).SubMatches(0)          
Block_List.Add blkname,match '//建立区块名称和对应的键值
set matches=nothing
End Sub

Public Sub Prase_Block(BlkName)'//---解析区块
dim Blk_Content,tag,k
Blk_Content=Block_List.Item(BlkName)
k=LBound(BKey)
   for each tag in BKey
        Blk_Content=replace(Blk_Content,VarBegin&tag&VarEnd,BValue(k))
    k=k+1
   next

   redim BKey(20)      '重新声明数组
   redim BValue(20)
   BNum=0                 '初始数变为0

   if Block.Exists(BlkName) then '//不重复记录内容
      dim m:m=Block.Item(BlkName)
      Block.Remove (BlkName)
      Block.Add BlkName,Blk_Content
   else
      Block.Add BlkName,Blk_Content
   end if
End Sub
'==============================================
Public Sub ClearTag()'//----------清除多余标签
re.Global=true
re.IgnoreCase=true
re.Pattern=BeginBlockStart&"([/s/S.]*?)"&BeginBlockEnd&"([/s/S.]*?)"&EndBlockStart&"([/s/S.]*?)"&EndBlockEnd
set Matches=re.Execute(Temp)
   For Each Match In Matches
       Temp=Replace(Temp,Match,"")
   Next
re.Pattern=VarBegin&"([/s/S.]*?)"&VarEnd
Set Matches=re.Execute(Temp)
   For Each Match In Matches
       Temp=Replace(Temp,Match,"")
   Next
End Sub
'=============================================
Public Sub OutPut()'//----------输出解析后的模板,方法
response.write Temp
End Sub

End Class
</Script>
<think>好的,用户问的是如何使用模打印一个vector。首先,我需要确认用户的具体需求。可能他们希望用C++中的模函数来打印任意型的vector元素,这样可以提高代码的复用性。 首先,我应该考虑模函数的基本结构。模函数允许处理不同型的数据,比如int、double或者自定义。所以,定义一个函数,参数是vector的引用,避免不必要的拷贝。 接下来,函数内部需要遍历vector的所有元素。使用范围for循环或者迭代器都可以,不过范围for更简洁。然后逐个输出元素,元素之间用逗号分隔,或者在最后一个元素不加逗号。 然后,需要考虑输出格式。比如,用户可能希望输出成似[1, 2, 3]的形式。所以,先输出一个左括号,然后依次输出元素,接着是右括号。 另外,处理空vector的情况也很重要。如果vector是空的,应该输出空的括号,比如[],而不是什么都不输出或者报错。 然后,测试这个模函数,确保它能正确处理不同型的vector,比如int、string或者其他自定义型。可能需要写几个测试用例来验证。 用户可能对模的使用不太熟悉,所以需要解释模的作用,以及为什么使用const引用作为参数,这样可以避免拷贝大的vector,提升效率。 可能还需要提到如何调用这个函数,比如传入一个vector<int>或者vector<string>,函数会自动实例化对应的版本。 最后,总结一下步骤,给出完整的代码示例,并说明各个部分的作用,确保用户能够理解并应用。</think>要使用模打印任意型的`vector`,可以通过以下步骤实现: --- ### **Step 1:定义模函数** ```cpp #include <iostream> #include <vector> template <typename T> void printVector(const std::vector<T>& vec) { // 打印逻辑 } ``` --- ### **Step 2:实现打印逻辑** 在函数内部遍历`vector`,并格式化输出: ```cpp std::cout << "["; for (size_t i = 0; i < vec.size(); ++i) { std::cout << vec[i]; if (i != vec.size() - 1) { std::cout << ", "; } } std::cout << "]" << std::endl; ``` --- ### **Step 3:处理空vector** 添加对空容器的处理: ```cpp if (vec.empty()) { std::cout << "[]" << std::endl; return; } ``` --- ### **最终代码** ```cpp #include <iostream> #include <vector> template <typename T> void printVector(const std::vector<T>& vec) { if (vec.empty()) { std::cout << "[]" << std::endl; return; } std::cout << "["; for (size_t i = 0; i < vec.size(); ++i) { std::cout << vec[i]; if (i != vec.size() - 1) { std::cout << ", "; } } std::cout << "]" << std::endl; } ``` --- ### **使用方法** ```cpp int main() { std::vector<int> nums = {1, 2, 3, 4, 5}; printVector(nums); // 输出: [1, 2, 3, 4, 5] std::vector<std::string> words = {"Hello", "World"}; printVector(words); // 输出: [Hello, World] return 0; } ``` --- ### **关键说明** 1. **模函数** `template <typename T>` 允许处理任意型的`vector` 2. **常量引用** `const std::vector<T>&` 避免拷贝大型容器 3. **空容器检测** 提升代码健壮性 4. **格式控制** 使用`[元素1, 元素2, ...]`的清晰格式 此方法支持所有可流式输出的型(需重载过`operator<<`),例如基础型、`std::string`或自定义
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值