使用新的基于范围的for循环,我们可以编写类似的代码
for(auto x: Y) {}
Run Code Online (Sandbox Code Playgroud)
哪个IMO是一个巨大的进步(例如)
for(std::vector<int>::iterator x=Y.begin(); x!=Y.end(); ++x) {}
Run Code Online (Sandbox Code Playgroud)
可以用它来循环两个同时循环,比如Pythons zip函数吗?对于那些不熟悉Python的人,代码如下:
Y1 = [1,2,3]
Y2 = [4,5,6,7]
for x1,x2 in zip(Y1,Y2):
print x1,x2
Run Code Online (Sandbox Code Playgroud)
作为输出 (1,4) (2,5) (3,6)
假设我有一堆向量:
vector<int> v1;
vector<double> v2;
vector<int> v3;
Run Code Online (Sandbox Code Playgroud)
所有相同的长度.现在,对于每个索引i,我希望能够将(v1 [i],v2 [i],v3 [i])视为元组,并且可以传递它.事实上,我希望有一个元组向量而不是向量元组,我可以使用它来完成上述操作.(用C语言,我可能会说结构数组而不是数组结构).我不想影响任何数据重新排序(想想:真正长的向量),即新的向量由我传入的各个向量支持.让我们.
现在,我希望我编写的类(ToVBackedVoT因缺少一个更好的名称而调用它)来支持任意选择向量来支持它(不仅仅是3,不是int,double和int,不是每个只是标量).我希望元组的向量是可变的,并且不需要在构造/赋值上进行复制.
如果我理解正确,可变参数模板和std::tupleC++ 11中的新类型是这样做的手段(假设我不想要无类型void*数组等).但是,我几乎不了解它们,也从未与它们合作过.你能帮我勾勒出这样一堂课的样子吗?或者如何,给定
template <typename ... Ts>
Run Code Online (Sandbox Code Playgroud)
我可以表达一些类似"模板参数列表是用这种类型的元素向量替换原始模板参数中的每个类型名称"吗?
注意:我想我可能也想稍后能够将其他向量连接到支持向量,从而创建一个实例ToVBackedVoT<int, double, int>,例如,一个实例ToVBackedVoT<int, double, int, unsigned int>.所以,在回答时请记住这一点.但这并不是至关重要的.
我想将以下传统的for循环转换为C++ 11 for-each循环,而不需要额外的循环结构:
int a[] = { 5, 6, 7, 8, 9, 10 };
int b[] = { 50, 60, 70, 80, 90, 100 };
// Swap a and b array elements
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
{
a[i] ^= b[i]; b[i] ^= a[i]; a[i] ^= b[i];
}
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以在C++ 11 for-each循环中提供多个变量,如:
for (int i, int j : ...)
Run Code Online (Sandbox Code Playgroud)