所以我知道要回圈列印一些東西,代碼如下所示:
for(int I = 0; I < num; I)...
并列印一個物件向量:
for(Square sq : squares)...
(如果我有一個類 Square 并且我創建了物件 sq 并且 squares 是向量的名稱)
但是,如果我希望我的輸出看起來像這樣,我將如何處理代碼:
方格 1 面積:3 方格 2 面積:6 方格 3 面積:9
更清楚地說:我的問題是,如何在我正在列印物件的回圈中合并第一個示例中的“我”?
uj5u.com熱心網友回復:
你可以這樣做:
for (size_t idx=0; idx<squares.size(); idx)
{
Square const & sq = squares[idx];
// Here you can use both:
// idx (which is the index in the vector),
// and sq (reference to the element).
}
這sq是 a的事實std::vector并不意味著您必須使用基于范圍的回圈(基于范圍的 for 回圈)遍歷它。
Astd::vector具有獲取其大小的方法(std::vector::size)和 operator[] 來訪問元素(std::vector::operator[])。
注意- 即使您確實使用基于范圍的回圈,最好使用參考(或 const 參考)以避免不必要的復制:
for(Square const & sq : squares) // without `const` if you need to modify the element
{
//...
}
uj5u.com熱心網友回復:
您還可以結合基于范圍的 for 和另一個索引變數
// with c 20 range-based for can have initializer in it
for(auto i=1; auto& s:squares){
std::cout << "square " << i << " area: " << s << '\n' ;
i;
}
https://godbolt.org/z/EfhefdoGP
c 20 之前
{
auto i=1;
for(auto& s:squares){
std::cout << "square " << i << " area: " << s << '\n' ;
i;
}
}
uj5u.com熱心網友回復:
因為vector的元素是連續排列的……或許可以做這樣的事情。
class Object
{
public:
Object( int a, int b ) : a(a),b(b) {}
int a,b;
};
int main()
{
std::vector<Object> Vec{ {1,2}, {10,20}, {100,200} };
for( const auto &obj : Vec )
{
auto index = &obj - &Vec[0]; //calculate index of element
std::cout << index << " : " << obj.a << "," << obj.b << std::endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/468177.html
