首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++/CLI for each 循環:訪問字符串字符的高效語法

     編輯:關於C++

C++/CLI 專有語法

C++/CLI 是微軟為 .NET 平台設計的 C++ 延伸,提供 `for each` 關鍵字,用於遍歷實現 `IEnumerable` 的集合。語法:

for each (type item in collection) { ... }

字符串遍歷示例

#include "stdafx.h"
using namespace System;

int main(array^ args) {
    int vowels = 0, consonants = 0;
    String^ proverb = L"A nod is as good as a wink to a blind horse.";
    
    for each (wchar_t ch in proverb) {
        if (Char::IsLetter(ch)) {
            ch = Char::ToLower(ch);
            switch (ch) {
                case L'a': case L'e': case L'i': case L'o': case L'u':
                    ++vowels; break;
                default:
                    ++consonants; break;
            }
        }
    }
    
    Console::WriteLine(proverb);
    Console::WriteLine(L"The proverb contains {0} vowels and {1} consonants.", vowels, consonants);
    Console::ReadLine();
    return 0;
}

關鍵特性

  • 只讀遍歷:循環變量 `ch` 是副本,修改不影響原字符串
  • 自動拆箱:`String` 實現 `IEnumerable`,直接產出 `wchar_t`
  • 性能優勢:官方文檔稱比 `for`/`while`/`foreach` 更高效(針對 CLI 類型優化)
  • 非標準 C++:僅限 C++/CLI(`/clr` 編譯),標準 C++ 使用範圍-based for:`for (auto c : str)`

標準 C++ 對比


// C++/CLI
for each (wchar_t ch in proverb) { ... }

// 標準 C++11 (範圍-based for)
for (wchar_t ch : proverb) { ... }  // 需 proverb 為 std::wstring 或數組

// 標準 C++98 (迭代器)
for (auto it = proverb.begin(); it != proverb.end(); ++it) { ... }

適用場景

  • .NET 互操作項目(C++/CLI 托管代碼)
  • 遍歷 `List^`、`array^`、`String^` 等 CLI 類型
  • 需與 C# / VB.NET 組件交互的混合編程

注意事項

  1. 不能用於標準 STL 容器(`std::vector` 等)
  2. 循環變量必須指定類型(不支持 `auto` 推導,早期版本)
  3. 不支持 `break`/`continue`(舊版本),需用 `goto` 或標誌變量
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved