C++ 开始和结束不起作用

c++ begin and end not working

本文关键字:不起作用 结束 开始 C++      更新时间:2023-10-16

这是代码:

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
int main(int argc, char** argv)
{
  ifstream myfile (argv[1]);
  char ch;
  char operator_symbols[]={'+','-','*','<','>','&','.',
                               '@','/',':','=','~','|','$',
                               '!','#','%','^','_','[',']',
                               '{','}','"','`','?'
                              };
  while(!myfile.eof())
    {
      myfile.get(ch);
      if(isalpha(ch))
    {
      cout << "isalpha " << ch << endl; 
    }
      else if(isdigit(ch))
    {
      cout << "is num " << ch << endl;
    }
      else if(find(begin(operator_symbols), end(operator_symbols), ch) != end(operator_symbols))
    {
      cout << "is operator sym" << ch << endl;
    }
      else if(ch == '(' || ch == ')' || ch == ';' || ch == ',')
    {
      cout << "is punctuation " << ch << endl;
    }
      else if (isspace(ch))
    {
      cout << "is space " << ch << endl;
    }
    }
}

该错误与尝试在运算符符号数组中查找字符匹配项的 if 条件有关。 :

****@*****:~/Documents/ABC$ g++ lexer.cpp -o lexer
lexer.cpp: In function ‘int main(int, char**)’:
lexer.cpp:30:42: error: ‘begin’ was not declared in this scope
       else if(find(begin(operator_symbols), end(operator_symbols), ch) != end(operator_symbols))
                                          ^
lexer.cpp:30:65: error: ‘end’ was not declared in this scope
       else if(find(begin(operator_symbols), end(operator_symbols), ch) != end(operator_symbols))

我已经包含了算法和迭代器。然而,编译器无法编译。请帮忙!我已经尝试过谷歌这个。

在 C++11 中引入了将 std::beginstd::end 与传统 C 数组一起使用,因此您需要在编译器调用中添加-std=c++11

tyr 来使用它:

#include <vector>
char str[]={'+','-','*','<','>','&','.',
                           '@','/',':','=','~','|','$',
                           '!','#','%','^','_','[',']',
                           '{','}','"','`','?'
                            };
vector<char> operator_symbols;
operator_symbols.push_back(str);
if(find(operator_symbols.begin(), operator_symbols.end(), ch) !=        operator_symbols.end())