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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

Q&A

解決済

2回答

1763閲覧

C++ 配列の要素を後ろから消したい

UE4benkyo-

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

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

0グッド

0クリップ

投稿2021/05/18 06:33

配列の要素を後ろから消したいのですがやり方が思いつきません。

仕様はどういうものかというとクラスの配列で、
関数を呼ぶとまず一番後ろを消す、2回目に呼ぶと後ろから2番目の要素を消す、
みたいな感じでやりたいです。
何かいい案はありますか?

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

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

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

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

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

fana

2021/05/18 07:01

> 消す とは? 具体的に何がどうなればよい? int A[] = { 1,2,3,4,5 }; とかいう配列があったときに, > 関数を呼ぶと 結果はどうなるべき?
UE4benkyo-

2021/05/18 07:03

ありがとうございます。 1回目は5, 2回目は4, 3回目は3, みたいに後ろから要素の中身を消したいです。
fana

2021/05/18 07:09

えっと, int A[] = { 1,2,3,4,5 }; は要素数5個の配列なんだけども,「要素の中身を消す」ことを行った結果として,配列Aの状態はどうなって欲しいのですか? { 1,2,3,4, 0 } みたいに,要素の値を何かしらの「消えた」ことを示す値みたいなのにすればそれで良い? それとも,どうにかして要素数4個の配列に変化するべき?
UE4benkyo-

2021/05/18 07:11

すみません。 0でいいですよ。
guest

回答2

0

ベストアンサー

「質問への追記・修正、ベストアンサー選択の依頼」での質疑応答より…
何かこんな関数で良いんじゃないですかね?

C++

1//要素数がArraySizeの配列について,要素値を後ろ側から見ていって, 2//最初に見つけた0でない要素の値を0にする 3void ChangeLastNonZeroElem_to_Zero( int *pArray, size_t ArraySize ) 4{ 5 for( size_t i=0; i<ArraySize; ++i ) 6 { 7 size_t index = ArraySize - (i+1); 8 if( pArray[ index ] != 0 ) 9 { pArray[ index ] = 0; break; } 10 } 11}

呼ぶ方は,こんな感じで.

C++

1const size_t N = 5; 2int A[N] = { 1,2,3,4,5 }; 3ChangeLastNonZeroElem_to_Zero( A, N );

質問には,

クラスの配列で…

と書いてあるけども,その場合は(このintの例における0に相当するような)「無効な状態を示す何かしらの状態」に変えてやればよいかと.

投稿2021/05/18 07:26

編集2021/05/18 07:36
fana

総合スコア11996

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

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

episteme

2021/05/18 12:19

const size_t N = 5; int A[N] = { 1,2,3,4,5 }; size_t size = N; // A[0]~A[size-1] が有効な要素 から始めて、削除のたびに --size すれば削除したことになるんちゃうの?
fana

2021/05/19 00:11

> 「質問への追記・修正、ベストアンサー選択の依頼」での質疑応答より… ということで, この回答は,「0(みたいなの)で埋める」という方向の話に沿っての物になっております. 「現在有効な要素の個数」を管理,は簡便な別の方法,ということになりますね. (「 "無効/消えた/無い" を示す状態に本当にデータを変更してやる処理」が必要かどうか,で選べばよいのかな?)
guest

0

フツーに vector でよいのでは?

C++

1#include <iostream> 2#include <vector> 3 4void print_vec(const std::vector<int>& vec) { 5 std::cout << "[ "; 6 for ( int item : vec ) std::cout << item << ' '; 7 std::cout << "]\n"; 8} 9 10int main() { 11 std::vector<int> v; 12 for ( int i = 0; i < 5; ++i ) v.push_back(i); 13 14 print_vec(v); 15 v.pop_back(); 16 print_vec(v); 17 v.pop_back(); 18 print_vec(v); 19 v.pop_back(); 20 print_vec(v); 21 22}

投稿2021/05/18 06:47

episteme

総合スコア16612

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

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

UE4benkyo-

2021/05/18 06:54

回答ありがとうございます! そうなんですかね... vectorって要素を追加する予定がないときでも使っていいんですか?
episteme

2021/05/18 06:55 編集

> vectorって要素を追加する予定がないときでも使っていいんですか? 質問の意味がわかりません。
UE4benkyo-

2021/05/18 07:13

すみません。 配列はあらかじめ決まった要素を確保するので要素の追加ができませんよね。 ですから今回は追加の予定がないので配列がいいのかなと思いました。
tacsheaven

2021/05/18 07:18

配列にすると要素数が固定されます。つまり追加も「削除」もしない、です。 今回は追加はないけど削除はするのですよね?
UE4benkyo-

2021/05/18 07:27

ありがとうございます。 結果的に後ろから中身が0になっていくようにしたいです。
episteme

2021/05/18 07:32

vectorを避ける理由があるんですか? 質問にある「望ましい動作」をカンペキに満たしてますけど。
UE4benkyo-

2021/05/18 07:39

全然そんなことないです。 vectorってこういう時に使うんだなぁと思いました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問