Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c+中的Foreach语句+;语言扩展呢? < P>可以在C++中用宏声明来模拟FURACH语句。我使用类似的语法以以下方式循环数组: int array1[10]; vector<int> array2(10); fori(array1) forj(array2) fork(123) if(array1[i]==array[j]) return true; int-array1[10]; 矢量阵列2(10); fori(阵列1) forj(array2) 叉子(123) if(数组1[i]==数组[j]) 返回true; 你喜欢用什么方式来扩展C++语言?_C++_Syntax_Macros_Foreach - Fatal编程技术网

c+中的Foreach语句+;语言扩展呢? < P>可以在C++中用宏声明来模拟FURACH语句。我使用类似的语法以以下方式循环数组: int array1[10]; vector<int> array2(10); fori(array1) forj(array2) fork(123) if(array1[i]==array[j]) return true; int-array1[10]; 矢量阵列2(10); fori(阵列1) forj(array2) 叉子(123) if(数组1[i]==数组[j]) 返回true; 你喜欢用什么方式来扩展C++语言?

c+中的Foreach语句+;语言扩展呢? < P>可以在C++中用宏声明来模拟FURACH语句。我使用类似的语法以以下方式循环数组: int array1[10]; vector<int> array2(10); fori(array1) forj(array2) fork(123) if(array1[i]==array[j]) return true; int-array1[10]; 矢量阵列2(10); fori(阵列1) forj(array2) 叉子(123) if(数组1[i]==数组[j]) 返回true; 你喜欢用什么方式来扩展C++语言?,c++,syntax,macros,foreach,C++,Syntax,Macros,Foreach,编辑: 问题中提到的宏观政策的实施是: #define fori(a) for(int i=0;i<getsize(a);i++) #define forj(a) for(int j=0;j<getsize(a);j++) #define foru(a) for(int u=0;u<getsize(a);u++) #define fork(a) for(int k=0;k<getsize(a);k++) #define forl(a) for(int l=0;l<g

编辑:

问题中提到的宏观政策的实施是:

#define fori(a) for(int i=0;i<getsize(a);i++)
#define forj(a) for(int j=0;j<getsize(a);j++)
#define foru(a) for(int u=0;u<getsize(a);u++)
#define fork(a) for(int k=0;k<getsize(a);k++)
#define forl(a) for(int l=0;l<getsize(a);l++)

template<typename T>
int getsize(T& v ){return v.size();}
template<typename T,int N>
int getsize(T(&v)[N]){return N;}
int getsize(int v){return v;}
#为(inti=0;i定义i(a)你应该签出

向量v; v、 推回(1); v、 推回(2); v、 推回(3); v、 推回(4); v、 推回(5); 增压器(内部和i、v) { i=i*i; }
如果出于某种原因我需要跳过STL容器,我将此宏用于容器类:

#define M_foreach( iterable ) \
do {\
  (iterable).prepareit();\
  while (  (iterable).stepit()  ) {

#if !defined( M_end )
#  define M_end   } } while( 0 );
#endif
(该宏假设您使用的容器具有迭代接口)


我发现boost的宏有点麻烦

以下是我的尝试:

#include <boost/typeof/typeof.hpp>
#define FOR_EACH(cont, iter)    \   
  for (BOOST_TYPEOF(cont)::const_iterator iter = cont.begin(), e = cont.end(); \
    iter != e; \
    ++iter)
#包括
#为每个(续,iter)定义
对于(BOOST_TYPEOF(cont)::常量迭代器iter=cont.begin(),e=cont.end()\
iter!=e\
++国际热核聚变实验堆(iter)
适用于标准容器

这样使用:

vector<int> vi;
// ...
FOR_EACH(vi, i)
  cout << *i;
向量vi; // ... 每个(vi,i)的
cout My 2×:使用std::for_每个模板比使用宏更合适。也许你至少可以共享你的宏的实现。为什么你不在宏中把变量作为参数,这样你就有一个宏来表示无限数量的变量名?而不是你手工编写的。因为我的代码使用大量循环。当您有包含10个函数的cpp文件,并且每个函数都以一个循环开始时,每次写入BOOST_FOREACH(int&i,xxx)似乎太过分了。即使使用visual studio的自动完成功能(在c中)它开始让我感到不安。所有这些重复的字符和迭代器类型都以某种特定的顺序出现。通常我甚至不反对代码重复。我想是那些特殊的字符,如逗号和分号让我感到不安。:)在分享之前,也许您应该编写它们,以符合人们对语言扩展的期望。foreach已经有了几种语言的定义,也许看看这些语言可以帮助你在目前写一个更好的版本,你的版本几乎没有用。你在用你自己的版本,不是吗?是的,Boost。Foreach工作得非常好。是的,它非常适合编写快速、易懂的代码。比你用的宏好多了,我喜欢。BOOST_FOREACH、BOOST::function和BOOST::shared_ptr+1。Boost foreach很整洁。您可能已经意识到了,但您的示例也将从boost assign中受益!v+=1,2,3,4,5;我讨厌boost foreach的唯一一点是早上这样大声喊叫。
#include <boost/typeof/typeof.hpp>
#define FOR_EACH(cont, iter)    \   
  for (BOOST_TYPEOF(cont)::const_iterator iter = cont.begin(), e = cont.end(); \
    iter != e; \
    ++iter)
vector<int> vi;
// ...
FOR_EACH(vi, i)
  cout << *i;
map<string, list<int> > msli;
msli["key1"].push_back(1);
msli["key1"].push_back(2);
msli["key2"].push_back(3);
msli["key2"].push_back(4);

FOR_EACH(msli, i) {
  cout << i->first << endl;
  FOR_EACH(i->second, j)
    cout << "\t" << *j << endl;
}

/*
Prints:
  key1
    1
    2
  key2
    3
    4
*/