初めて質問させて頂くものです。読み辛い文章かもしれませんがよろしくお願い致します。
以下のコードを実行させ、予想では、
0123456789
0123456789
0123456789
と出力されるのではと思ったのですが、上手くいきませんでした。
やりたいこととしましては、
v[1],v[2],v[3]にそれぞれ複数の要素を入れ、v[1][6]でv[1]の6番目の要素を指定したいのですが、これでは無理なのでしょうか?
Vector2次元配列の使い方
Re: Vector2次元配列の使い方
v[0], v[1], v[2] にですね。あるちゃ さんが書きました: v[1],v[2],v[3]にそれぞれ複数の要素を入れ、
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int> > v(3, vector<int>(10));
int main(int argc, char* argv[])
{
for (int x = 0; x < 3; ++x) {
for (int y = 0; y < 10; y++) {
v[x].push_back(y);
}
}
for (size_t x = 0; x < v.size(); x++) {
for (size_t y = 0; y < v[x].size(); y++)
printf(" %2d", v[x][y]);
printf("\n");
}
return 0;
}
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9
各行に push_back() で要素を追加したら、3 x 20 になるのは当然です。
Re: Vector2次元配列の使い方
早速の回答有難うございます
v[0],v[1],v[2]ですね、すみません。
push_backについて一つ大きな勘違いをしていたのですが、これは事前に確保した領域にさらに領域を付け加えるのですね。。。
初歩的なことでお恥ずかしいです。
それを踏まえた上でなのですが、事前に要素の領域を確保せず、push_backのみで追加させていくことも可能でしょうか?
v[0],v[1],v[2]ですね、すみません。
push_backについて一つ大きな勘違いをしていたのですが、これは事前に確保した領域にさらに領域を付け加えるのですね。。。
初歩的なことでお恥ずかしいです。
それを踏まえた上でなのですが、事前に要素の領域を確保せず、push_backのみで追加させていくことも可能でしょうか?
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int> > v[3];
int main(int argc, char* argv[])
{
for (int x = 0; x < 3; ++x) {
for (int y = 0; y < 10; y++) {
v[x].push_back(y);
}
}
for (size_t x = 0; x < v.size(); x++) {
for (size_t y = 0; y < v[x].size(); y++)
printf(" %2d", v[x][y]);
printf("\n");
}
return 0;
}
Re: Vector2次元配列の使い方
行だけ確保して、列を push_back() で確保する場合。あるちゃ さんが書きました:それを踏まえた上でなのですが、事前に要素の領域を確保せず、push_backのみで追加させていくことも可能でしょうか?
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int> > v(3);
int main(int argc, char* argv[])
{
for (int x = 0; x < 3; ++x) {
for (int y = 0; y < 10; y++) {
v[x].push_back(y);
}
}
for (size_t x = 0; x < v.size(); x++) {
for (size_t y = 0; y < v[x].size(); y++)
printf(" %2d", v[x][y]);
printf("\n");
}
return 0;
}
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int> > v;
int main(int argc, char* argv[])
{
for (int x = 0; x < 3; ++x) {
v.push_back(vector<int>());
for (int y = 0; y < 10; y++) {
v[x].push_back(y);
}
}
for (size_t x = 0; x < v.size(); x++) {
for (size_t y = 0; y < v[x].size(); y++)
printf(" %2d", v[x][y]);
printf("\n");
}
return 0;
}
Re: Vector2次元配列の使い方
push_back() の代わりに resize() で領域を確保する場合
確保する個数が分かっていれば、push_back() でチビチビ拡張するよりも
resize() で事前に確保するほうが効率が良いでしょう。
もっとも、push_back() も 1個ずつ拡張するのではなく、1回で複数個拡張
します。push_back() のあとで、すぐに capacity() を表示してみてください。
size() は 1ずつ増えますが。ということで、報告をお待ちしています。
#include <vector>
#include <cstdio>
using namespace std;
vector<vector<int> > v;
int main(int argc, char* argv[])
{
v.resize(3);
for (int x = 0; x < 3; ++x) {
v[x].resize(10);
for (int y = 0; y < 10; y++) {
v[x][y] = y;
}
}
for (size_t x = 0; x < v.size(); x++) {
for (size_t y = 0; y < v[x].size(); y++)
printf(" %2d", v[x][y]);
printf("\n");
}
return 0;
}
resize() で事前に確保するほうが効率が良いでしょう。
もっとも、push_back() も 1個ずつ拡張するのではなく、1回で複数個拡張
します。push_back() のあとで、すぐに capacity() を表示してみてください。
size() は 1ずつ増えますが。ということで、報告をお待ちしています。
Re: Vector2次元配列の使い方
迅速な回答に感謝致します。
行だけ確保して、列を push_back() で確保する場合。の方法で無事解決できました!
行、列共に動的に設定できるのですね。とても勉強になりました。
また何かありましたら宜しくお願い致します。
行だけ確保して、列を push_back() で確保する場合。の方法で無事解決できました!
行、列共に動的に設定できるのですね。とても勉強になりました。
また何かありましたら宜しくお願い致します。