专业编程基础技术教程

网站首页 > 基础教程 正文

C++的for循环:foreach loop c++的for循环语句

ccvgpt 2024-10-19 03:27:03 基础教程 8 ℃

在c++中,for循环是传统的遍历一个集合(如数组array、向量vector)方法。foreach结构通常是指基于范围的for循环(C++11中引入),它使用for(declaration : range)的语法,这种循环用于遍历容器或者其他可以视作序列的对象。

1、传统的for循环

C++的for循环:foreach loop c++的for循环语句

for循环的传统语法,是三段式的,即起始点、结束循环控制条件、步长递增。

int sum = 0;  
for( int i = 1; i<=100; i++)
{
		sum += i;
}


2、使用迭代器的for循环

对于标准模板容器,如vector、string,在用for循环进行遍历的时候,除了用.size()控制次数外,还可以采用迭代器的方式,迭代器相当于指针。如:

//用迭代器遍历vector<string>中的每个string
typedef std::vector<std::string>::iterator vecIter;
void traverseStringVectorByIterator(std::vector<std::string>  vec)
{
    vecIter iter =vec.begin();
    for(iter = vec.begin(); iter != vec.end(); iter++)
    {
        std::cout << *iter << std::endl;
    }
}

3、使用foreach的for循环

这种语法,优点是代码变得简洁许多。熟悉之后,比传统三段式语法的效率高。

//用foreach loop遍历一个string的每个字符
void traverseStringByForeachloop(std::string str)
{
    for(char ch : str)
    {
        std::cout << ch << std::endl;
    }
}


下面是完整的示例代码:

#include <iostream>
#include <vector>

//给冗长的迭代器,取一个简短的别名
typedef std::string::iterator strIter; 
typedef std::vector<std::string>::iterator vecIter;

////用数组下标遍历字符串数组
void traverseStringArrayByIndex(std::string  str[],int n);

//用foreach loop遍历vector<string>中的每个string
void traverseStringVectorByForeachloop(std::vector<std::string>  &vec);

//用迭代器遍历vector<string>中的每个string
void traverseStringVectorByIterator(std::vector<std::string>  vec);

//用string::iterator遍历一个string的每个字符
void traverseStringByIterator(std::string str);

//用foreach loop遍历一个string的每个字符
void traverseStringByForeachloop(std::string str);

int main()
{
    // foreach loop = loop that eases traversal over a iterable data set.
    
    std::string name[]  = {"Bill Gates", "Steve Jobs", "Ren zhengfei","Elon Musk", "Chao dewang"};  //string array
    std::vector<std::string> vec1({"Bill Gates", "Steve Jobs"});
    std::vector<std::string> vec2 = {"Ren zhengfei","Elon Musk", "Chao dewang"};
    // traverseStringArrayByIndex(name,5);
    // traverseStringVectorByForeachloop(vec1);
    // traverseStringVectorByIterator(vec2);
    // traverseStringByIterator("Hello");
    traverseStringByForeachloop("Coding the world");

    return 0;
}

//用数组下标遍历字符串数组
void traverseStringArrayByIndex(std::string  str[],int n)
{
    std::cout << std::endl;
    std::cout << "traverse a string array by index: \n";
    for(int i = 0; i < n; i++)
    {
        std::cout << str[i] << std::endl;
    }
}

//用foreach loop遍历vector<string>中的每个string
void traverseStringVectorByForeachloop(std::vector<std::string>  &vec)
{
    for(std::string str:vec)
    {
        std::cout << str << std::endl;
    }
}

//用迭代器遍历vector<string>中的每个string
void traverseStringVectorByIterator(std::vector<std::string>  vec)
{
    vecIter iter =vec.begin();
    for(iter = vec.begin(); iter != vec.end(); iter++)
    {
        std::cout << *iter << std::endl;
    }
}

//用string::iterator遍历一个string的每个字符
void traverseStringByIterator(std::string str)
{
    std::cout << std::endl;
    std::cout << "traverse a string " << str <<" by string::iterator\n";
    strIter iter;
    for(iter = str.begin(); iter != str.end(); iter++ )
    {
        std::cout << *iter << std::endl;
    }  
}

//用foreach loop遍历一个string的每个字符
void traverseStringByForeachloop(std::string str)
{
    for(char ch : str)
    {
        std::cout << ch << std::endl;
    }
}

Tags:

最近发表
标签列表