1

私はインターネット上でたくさん検索しましたが、ベクトルのデータを印刷するための簡単な例を見つけることができませんでした..

うまくいきませんでしたが、配列のように印刷しようとしました...

これが私が試したことです:

using namespace std ;
.....
const int MAX = 255 ;

vector <string> testersName[MAX];
cout << testersName[i] << endl;

エラーは cout 行のみにあり、最初の行はコンパイルされており、すべてがうまくいっています..

このエラーが発生していますが、testersName内にデータを取得しました:

「エラー 1 エラー C2679: バイナリ '<<' : 'std::vector<_Ty>' 型の右側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)」

4

3 に答える 3

5

vector <string> testersName[MAX];ベクトルの配列を宣言します。単純に試してみてくださいvector <string> testersName(MAX);- これはMAX要素を持つベクトルを宣言します。

于 2012-12-10T12:16:09.020 に答える
1

ベクトルの要素を反復処理してから、それぞれをブリントする必要があります。

vector <string> testersName;
// Fill your vector
for (int i = 0; i < testersName.size(); ++i) {
    cout << testersName[i] << endl;
}

さらに、私はその線vector <string> testersName[MAX];があなたが思っていることをするとは思いません。ベクターは塗りつぶすと動的に大きくなるため、ベクターにサイズを指定する必要はありません。それでもサイズを指定したい場合は、括弧を使用してください:(MAX)

于 2012-12-10T12:17:07.123 に答える
0

ベクトルを印刷する最良の方法は、ある種のラッパーを使用することです。

まず始めましょう:

template< typename T >
class ConstVecFormat
{
   private:
      std::vector<T> const& vec_;
      const std::string prefix_, delim_, suffix_;

   public:
      explicit ConstVecFormat( std::vector<T> const& vec, prefix="", delim=",", suffix="" ) :
          vec_(vec), prefix_(prefix), delim_(delim), suffix_(suffix_)
      {
      }

      std::ostream& print( std::ostream& os ) const
      {
         typename std::vector<T>::const_iterator iter = vec_.begin(), end=vec_.end();
         os << prefix_;
         if( iter != end )
              os << *iter;
         else 
           while( ++iter != end )
           {
             os << delim_ << *iter;
           }

         os << suffix_;
         return os;
      }
 };

 template< typename T >
 std::ostream & operator<<( std::ostream & os, ConstVecFormat<T> const& format )
 {
     return format.print( os );
 }

これは、コレクションを印刷するためのもう1つの一般的なものを作成するために、このテンプレートを大幅に拡張した前のトピックの複製に向かっています。

于 2012-12-10T12:32:22.723 に答える