vectorを用いたスタック操作

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
template

vectorを用いたスタック操作

#1

投稿記事 by template » 6年前

C++を使用したプログラムで、vector を用いて配列のように扱って行う課題があるのですが、データを代入する部分にpush_backを使用しなければならないのですが、扱い方がよくわかっておりません。
push_backを用いるとすればどのようにすればよいでしょうか?

コード:

#include <iostream>
#include <vector>
#include <string>

class Entry {
	public:
		std::string name;
		std::string phone;
		Entry (const std::string& nm="", const std::string& ph="") {
			name = nm;
			phone = ph;
		}
};


std::ostream& operator<< (std::ostream& os, const Entry& e) {
	os << e.name << ": " << e.phone;
	return os;
}


int main (void)
{
	std::vector<Entry> e(10);
	
	int n = 0;
	int number;
	
	//以下のコメントアウトを取れば、求める動作を行う
	/*
	e[n++] = Entry ("Tokyo Company (PR)", "012-1111-1111");
	e[n++] = Entry ("Tokyo Company (KFC)", "012-1111-1111");
	e[n++] = Entry ("Osaka City Station", "012-1111-1111");
	e[n++] = Entry ("Newtown NT", "012-1111-1111");
	e[n++] = Entry ("Newtown Hotel", "012-1111-1111");
	*/
	


	for (int i=0; i<n; i++) {
		number = e[i].phone.find ("-") + 1;
		e[i].phone.replace ( 0, e[i].phone.length(), e[i].phone.substr (number) );
		
	}
	std::cout << std::endl;
	std::cout << "検索用文字列を入力して下さい: ";
	std::string s;
	std::cin >> s;

	for (int i=0; i<n; i++) {
		if ( e[i].name.find(s) != e[i].name.npos ) {
			std::cout << e[i] << std::endl;
		}
	}
	
	
	return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: vectorを用いたスタック操作

#2

投稿記事 by みけCAT » 6年前

例えば、以下のようにするといいと思います。

コード:

// main関数以外は同じ

int main (void)
{
	std::vector<Entry> e; // いきなり要素を作らない

	int n = 0;
	int number;


	e.reserve(10); // (効率を上げるために)メモリを確保する
	// 要素を追加する
	e.push_back( Entry ("Tokyo Company (PR)", "012-1111-1111") );
	e.push_back( Entry ("Tokyo Company (KFC)", "012-1111-1111") );
	e.push_back( Entry ("Osaka City Station", "012-1111-1111") );
	e.push_back( Entry ("Newtown NT", "012-1111-1111") );
	e.push_back( Entry ("Newtown Hotel", "012-1111-1111") );
	n = e.size(); // 入れた要素数を取得する
	e.resize(10); // 全体の要素数をもとのコードに合わせる


	for (int i=0; i<n; i++) {
		// 以下同じ
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

template

Re: vectorを用いたスタック操作

#3

投稿記事 by template » 6年前

なるほど、要素を作らず、動的割当てでメモリ確保を行って用いればよかったのですね。
ありがとうございます、参考になります。

返信

“C言語何でも質問掲示板” へ戻る