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

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

新規登録して質問してみよう
ただいま回答率
85.35%
char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

3108閲覧

vectorとポインタ文字列

tyapapa

総合スコア51

char

charは文字データ型を指します。一文字分の文字コードの格納を想定としている型です。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

C++

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/17 12:58

vectorにポインタ文字列を複数格納して、
その文字列を表示させたいです。
以下の場合だと文字列をvectorにpush_backできないです。
データ型はchar*なので格納できると考えたのですが、
なぜできないのでしょうか?

C++

1int main() 2{ 3 const char* pstr = "abcdef"; // 配列 4 std::vector<char*> vstr; // ベクター配列 5 6 for (int i = 0; 5 > i; i++) 7 { 8 // 文字列格納 9 vstr.push_back(pstr); 10 } 11 12 // 表示 13 std::cout << vstr << std::endl; 14}

完成させたい表示イメージ

abcdef
abcdef
abcdef
abcdef
abcdef


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

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

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

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

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

guest

回答2

0

vector<char *>は、メモリ管理が煩雑となるのでおすすめできません。vector<string>としましょう。

投稿2020/08/17 13:23

maisumakun

総合スコア146018

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

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

0

ベストアンサー

tyapapaさん

std::vector<char*>の要素に
const char*型を格納しているのと、
std::cout << vstr << std::endl;の部分で
vectorオブジェクトをそのまま
表示しようとしているのがエラーの原因です。

下記に修正したコード載せておきます。

c++

1#include <iostream> 2#include <vector> 3 4int main(){ 5 const char* pstr = "abcdef"; // 配列 6 std::vector<const char*> vstr; // ベクター配列 7 8 for (int i=0; i<5; i++)vstr.push_back(pstr); 9 for(const auto& i:vstr)std::cout << i << std::endl; 10}

wandboxで実行

追記
std::vectorはstd::coutで直接内容を表示できないですが
下記のように自分で<<演算子のオーバーロードを作れば
std::cout << std::vectorのオブジェクト << std::endl;
で表示できるようになります。

c++

1#include <iostream> 2#include <vector> 3 4std::ostream& operator<<(std::ostream& os, const std::vector<const char*>& vec){ 5 for(const auto& i:vec) os << i << std::endl; 6 return os; 7} 8 9int main(){ 10 const char* pstr = "abcdef";// 配列 11 std::vector<const char*> vstr;// ベクター配列 12 13 for (int i=0; i<5; i++) vstr.push_back(pstr);// 5回vstrへ追加 14 std::cout << vstr << std::endl;// 表示 15}

wandboxで実行

投稿2020/08/17 13:43

編集2020/08/17 21:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tyapapa

2020/08/18 01:06

詳細な解説。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問