循环效率 - C++

Sla*_*ure 8 c++ performance loops

初学者质疑,关于循环效率.我已经开始用C++编程(我的第一语言),并且一直在使用Bjarne Stroustrup的'Principles and Practice Using C++'.我已经完成了前面几章的介绍,并且刚刚介绍了循环的概念.

关于循环的第一个练习请求如下:字符'b'是char('a'+ 1),'c'是char('a'+ 2)等.使用循环写出一个表具有相应整数值的字符:

a 97,b 98,...,z 122

虽然,我使用大写,我创建了以下内容:

int number = 64; //integer value for @ sign, character before A
char letter = number;//converts integer to char value
int i = 0;

while (i<=25){
    cout << ++letter << "\t" << ++number << endl;
    ++i;
    }
Run Code Online (Sandbox Code Playgroud)

我应该只针对"我"出现在一个循环中,还是在类型之间转换时根本不可能?除了将字符值转换为它的整数对应物(即当前方法的反面)或根本没有转换并且具有字母存储'@'之外,我无法想到除上述任何其他方式之外的其他方式.

Pat*_*ick 22

从jk开始,你甚至可以在循环中使用字母本身(字母<='z').我也会使用for循环,但那只是我.

for( char letter = 'a'; letter <= 'z'; ++letter )
    std::cout << letter << "\t" << static_cast<int>( letter ) << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • @Alok:经验保证'a'+ 1 == b.一旦我在一个没有它的环境中工作,我就会编写处理它的代码;) (2认同)

sha*_*oth 8

你应该首先瞄准清晰度,然后尝试微观优化.您可以更好地将其重写为for循环:

const int offsetToA = 65;
const int numberOfCharacters = 26;
for( int i = 0; i < numberOfCharacters; ++i ) {
    const int characterValue = i + offsetToA;
    cout << static_cast<char>( characterValue  ) << characterValue << endl;
}
Run Code Online (Sandbox Code Playgroud)

你可以在不同的类型之间进行转换 - 这就是所谓的转换(static_cast上面代码中的构造).

  • 关于清晰度; 数字常数很少是一个好主意.我建议将`offsetToA`赋值为''a'(或''A'`),它被隐式转换为(正确的)`int`.这当然还要求打印的第一个字符计算为"offsetToA + 0". (6认同)