質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1279閲覧

C++ vecterを用いての構造体形成

inle_rah

総合スコア11

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2022/08/22 15:43

前提

C++を独学している初学者です。
現在、タイトル、著者名、在庫数を入力して登録するというプログラムを作成中です。
構造体を使わずvecterを用いて現状のコードを書き換えたいのですが、vecterが現在使用している教科書などに無く、躓いてしまっています。

実現したいこと

  • cardという構造体を使用せず、同様の機能をvecterを用いて実装する
  • 現在動いているこのプログラムが、vecterを用いたプログラムに書き換わっても同様に動作をする

該当のソースコード

C++

1/* ヘッダ */ 2#include <iostream> 3#include <vector> 4using namespace std; 5 6/* 構造体定義 */ 7struct carda 8{ 9 /* 変数 */ 10 char titlea[50+1]; 11 char authora[50+1]; 12 int numa; 13 14 /* コンストラクタ */ 15 carda(){ 16 cout << "コンストラクタを呼び出しました。\n"; 17 } 18}; 19 20 21/* 構造体定義 */ 22struct cardb 23{ 24 /* 変数 */ 25 char titleb[50+1]; 26 char authorb[50+1]; 27 int numb; 28 29 /* コンストラクタ */ 30 cardb(){ 31 cout << "コンストラクタを呼び出しました。\n"; 32 } 33}; 34 35 36/* メイン処理 */ 37int main() 38{ 39 /* cardaへの登録 */ 40 carda booka; 41 42 cout << "本のタイトルを入力してください。\n"; 43 cin >> booka.titlea; 44 45 cout << "著者名を入力してください。\n"; 46 cin >> booka.authora; 47 48 cout << "在庫の数を入力してください。\n"; 49 cin >> booka.numa; 50 51 /* 登録確認 */ 52 cout << "以下の内容で登録します:\n"; 53 cout << "タイトル:" << booka.titlea << "\n"; 54 cout << "著者名:" << booka.authora << "\n"; 55 cout << "在庫数:" << booka.numa << "\n"; 56 57 /* cardbへの登録 */ 58 cardb bookb; 59 60 cout << "本のタイトルを入力してください。\n"; 61 cin >> bookb.titleb; 62 63 cout << "著者名を入力してください。\n"; 64 cin >> bookb.authorb; 65 66 cout << "在庫の数を入力してください。\n"; 67 cin >> bookb.numb; 68 69 /* 登録確認 */ 70 cout << "以下の内容で登録します:\n"; 71 cout << "タイトル:" << bookb.titleb << "\n"; 72 cout << "著者名:" << bookb.authorb << "\n"; 73 cout << "在庫数:" << bookb.numb << "\n"; 74 75 76 77 return 0; 78}

補足情報(FW/ツールのバージョンなど)

VScode(ver: 1.69.2)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/08/23 00:47

構造体を使うことと std::vector を使うこととは背反ではないので,何か根本から話が間違っているような気がします. あと,提示されたコードを見た感じだと,vectorとか言い出すよりも前に「配列」を先に修めるのが良さそうに見えます.
dodox86

2022/08/23 02:05

std::vectorの各要素に現在のcardaとbの構造体のメンバーを割り当てたいと言う要望でしょうか。であればちょっと妙な要件に思いますが、そんな課題、問題があったのでしょうか。
inle_rah

2022/08/23 04:30

carda,cardbを割り当てたいというよりも、出された課題が「main関数で、構造体を二件作成するのではなく、vectorを用いて実装する。二件分のレコードを収納、出力する」というものでした。
dodox86

2022/08/23 06:23

であれば、既にいただいている回答で示されるようなことになるかと思います。
guest

回答3

0

まず「vecter」ではなく「vector」ではないでしょうか?
教科書に「vecter」は載っていないけど、「vector」なら載っているとしたら問題解決でしょうか?

以下vectorを前提に…

独学しているということは、c++でプログラミングできる能力を習得したいということですね!
先人が学習した知識を無料で拝借して丸々回答ソースを欲している輩は独学者なんて言えないですよね!
教科書に載っていないことが出てくる度にここで聞くつもりなのかよって話ですよね!

つまり、"実現したいこと"を実現させる為にvectorの使い方を身につける方法を知りたい、という質問ですね。

以下、お好きなものをどうぞ

  1. vectorの記載がない教科書など窓から投げ捨て、 vectorについて記述がある解説書を購入して学習する
  2. check the reference(https://cpprefjp.github.io/reference/vector/vector.html)
  3. 独学を諦めて、有料スクールに通うorMENTA

参考
cpprefjp - C++日本語リファレンス vector vector

使用例をぐぐっても断片的な知識しか得られないことが多いのでお勧めはしません。参考程度に利用したほうがいいでしょう。

投稿2022/08/22 19:35

Crimson_Tide

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

構造体を使わずvecterを用いて現状のコードを書き換えたいのですが、

構造体を使わずに vectorだけを用いると、

C++

1#include <iostream> 2#include <vector> 3#include <string> 4using namespace std; 5 6int main() 7{ 8 vector<string> title(2); 9 vector<string> author(2); 10 vector<int> num(2); 11 12 for (int i = 0; i < 2; i++) { 13 cout << "本のタイトルを入力してください。\n"; 14 cin >> title[i]; 15 cout << "著者名を入力してください。\n"; 16 cin >> author[i]; 17 cout << "在庫の数を入力してください。\n"; 18 cin >> num[i]; 19 20 cout << "以下の内容で登録します:\n"; 21 cout << "タイトル:" << title[i] << "\n"; 22 cout << "著者名:" << author[i] << "\n"; 23 cout << "在庫数:" << num[i] << "\n"; 24 } 25}

しかし、やりたいことは違うんだと思います。
別々の構造体を用いずに、ひとつの構造体で、vector を用いて
2つのデータを扱いたいのではありませんか?

C++

1#include <iostream> 2#include <vector> 3#include <string> 4using namespace std; 5 6struct card { 7 string title; 8 string author; 9 int num; 10}; 11 12int main() 13{ 14 vector<card> book(2); 15 16 for (int i = 0; i < 2; i++) { 17 cout << "本のタイトルを入力してください。\n"; 18 cin >> book[i].title; 19 cout << "著者名を入力してください。\n"; 20 cin >> book[i].author; 21 cout << "在庫の数を入力してください。\n"; 22 cin >> book[i].num; 23 24 cout << "以下の内容で登録します:\n"; 25 cout << "タイトル:" << book[i].title << "\n"; 26 cout << "著者名:" << book[i].author << "\n"; 27 cout << "在庫数:" << book[i].num << "\n"; 28 } 29}

投稿2022/08/23 03:45

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

教科書にのっていないということで、STL標準講座をお勧めします。
古いですが、教科書として手元にあると便利です。

一から説明されているので、お勧めです。

たしかに、ネット上にはvectorに関する情報があふれていますが、
体系的にととのえられた本ということで貴重かと思います。

STLはStandard Template Library の略で、vectorのほかにも
list,map,set,などがあり、ほかにもalgorithm というSTL専用のライブラリもあります。
C/C++をやりたいのであれば、読む価値はあると思います。
¥4180と少々値段は高いですが、それだけ価値があると思います。

投稿2022/08/22 23:14

yukkuri_55

総合スコア240

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問