【发布时间】:2016-04-24 17:44:00
【问题描述】:
假设我们有一个vectors 的vector,我们将所有元素初始化为0。
vector<vector<int>> P(MyObjects.size() + 1, vector<int>(MyBag.MaxCapacity + 1, 0));
我的问题是:
是否可以从 1 列开始迭代 vector 并以某种方式在代码中更改 1?
for (auto& row : P) //Tried to add (row + 1) : P but I'm receiving an Error
{
for (auto& elem : row) //Tried to add(elem + 1) : row but I'm receiving an Error
{
std::cout << elem << " ";
}
}
我一直在 SO 和 Web 上寻找答案,但没有任何类似的东西。
我只对使用auto的解决方案感兴趣
编辑: 这是错误的输出
main.cpp:74:18: error: expected ‘;’ before ‘+’ token
for (auto& row +1 : P)
^
main.cpp:74:21: error: expected ‘;’ before ‘:’ token
for (auto& row +1 : P)
^
main.cpp:74:21: error: expected primary-expression before ‘:’ token
main.cpp:74:21: error: expected ‘)’ before ‘:’ token
main.cpp:74:21: error: expected primary-expression before ‘:’ token
还有一个我正在尝试使用的代码
for (auto& row + 1 : P)
{
for (auto& elem + 1 : row)
{
std::cout << elem << " ";
}
}
是的,我知道我们可以使用以下语法
for(vector< vector<int> >::iterator row = v.begin() + 1; row != v.end(); ++row) {
for(vector<int>::iterator col = row->begin() + 1; col != row->end(); ++col) {
cout << *col;
}
}
但我不想使用它。
【问题讨论】:
-
“是否可以从 1 列开始迭代一个向量,并且 1 在代码中以某种方式发生变化?” 当然可以。你可能问错了问题。提供minimal reproducible example 并逐字显示您的错误消息。
-
“我只对使用 auto 的解决方案感兴趣” 这有点像问:我必须从墙上钻出一个螺丝。这样做的正确工具是什么?请注意,我只对使用锤子的解决方案感兴趣(因为这是我手头唯一的工具).
-
你不能将左值作为表达式。
-
@Charlie 你显然将
auto&与std::vector::iterator之类的东西混淆了。 -
你不想要
for(vector< vector<int> >::iterator row = v.begin() + 1; row != v.end(); ++row),但是for(auto row = v.begin() + 1; row != v.end(); ++row)呢?