PDA

View Full Version : نحوه استفاده از vector



roohollahnoori
شنبه 07 شهریور 1388, 10:59 صبح
چگونه می شود متغیرvector رادر ++c به کار برد؟

Nima_NF
شنبه 07 شهریور 1388, 12:17 عصر
دقت کنید که vector یک کلاس هست و نوع داده ای نیست. ضمنا از نوع قالب یا همان template هست.

به این شکل:



#include <vector>

vector <int> myVector; // a vector for int

myVector.push_back( 10 );
myVector.push_back( 15 );

cout << "last int: " << myVector.back( ) << endl;

prog69
چهارشنبه 18 شهریور 1388, 22:07 عصر
با سلام
لطفا درباره ی گرفتن اطلاعات با vector و vector چندبعدی توضیح دهید.:افسرده:
ممنون

deopen
پنج شنبه 19 شهریور 1388, 12:16 عصر
نقل قول از کتاب How To Program c++ deitel میباشد این مثال نحوه کار کردن با vector را نشان داده است, فصل 23 کتاب در مورد vector توضیح داده است که متاسفانه انتشارات غزال از ترجمه این فصل خود داری کرده است:


// Fig. 7.26: fig07_26.cpp
// Demonstrating C++ Standard Library class template vector.
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;

#include <vector>
using std::vector;

void outputVector( const vector< int > & ); // display the vector
void inputVector( vector< int > & ); // input values into the vector

int main()
{
vector< int > integers1( 7 ); // 7-element vector< int >
vector< int > integers2( 10 ); // 10-element vector< int >

// print integers1 size and contents
cout << "Size of vector integers1 is " << integers1.size()
<< "\nvector after initialization:" << endl;
outputVector( integers1 );

// print integers2 size and contents
cout << "\nSize of vector integers2 is " << integers2.size()
<< "\nvector after initialization:" << endl;
outputVector( integers2 );

// input and print integers1 and integers2
cout << "\nEnter 17 integers:" << endl;
inputVector( integers1 );
inputVector( integers2 );

cout << "\nAfter input, the vectors contain:\n"
<< "integers1:" << endl;
outputVector( integers1 );
cout << "integers2:" << endl;
outputVector( integers2 );

// use inequality (!=) operator with vector objects
cout << "\nEvaluating: integers1 != integers2" << endl;

if ( integers1 != integers2 )
cout << "integers1 and integers2 are not equal" << endl;

// create vector integers3 using integers1 as an
// initializer; print size and contents
vector< int > integers3( integers1 ); // copy constructor

cout << "\nSize of vector integers3 is " << integers3.size()
<< "\nvector after initialization:" << endl;
outputVector( integers3 );

// use assignment (=) operator with vector objects
cout << "\nAssigning integers2 to integers1:" << endl;
integers1 = integers2; // integers1 is larger than integers2

cout << "integers1:" << endl;
outputVector( integers1 );
cout << "integers2:" << endl;
outputVector( integers2 );

// use equality (==) operator with vector objects
cout << "\nEvaluating: integers1 == integers2" << endl;

if ( integers1 == integers2 )
cout << "integers1 and integers2 are equal" << endl;

// use square brackets to create rvalue
cout << "\nintegers1[5] is " << integers1[ 5 ];

// use square brackets to create lvalue
cout << "\n\nAssigning 1000 to integers1[5]" << endl;
integers1[ 5 ] = 1000;
cout << "integers1:" << endl;
outputVector( integers1 );

// attempt to use out-of-range subscript
cout << "\nAttempt to assign 1000 to integers1.at( 15 )" << endl;
integers1.at( 15 ) = 1000; // ERROR: out of range
return 0;
} // end main

// output vector contents
void outputVector( const vector< int > &array )
{
size_t i; // declare control variable

for ( i = 0; i < array.size(); i++ )
{
cout << setw( 12 ) << array[ i ];

if ( ( i + 1 ) % 4 == 0 ) // 4 numbers per row of output
cout << endl;
} // end for

if ( i % 4 != 0 )
cout << endl;
} // end function outputVector

// input vector contents
void inputVector( vector< int > &array )
{
for ( size_t i = 0; i < array.size(); i++ )
cin >> array[ i ];
} // end function inputVector

/************************************************** ************************
* (C) Copyright 1992-2005 by Deitel & Associates, Inc. and *
* Pearson Education, Inc. All Rights Reserved. *
* *
* DISCLAIMER: The authors and publisher of this book have used their *
* best efforts in preparing the book. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or *
* consequential damages in connection with, or arising out of, the *
* furnishing, performance, or use of these programs. *
************************************************** ************************/


این هم استفاده چند بعدی از vector :


#include<iostream>
using std::cout;
using std::endl;

#include<conio.h>

#include <vector>
using std::vector;

int main() {
vector <int> myVector(4,3); // a vector for int
myVector[3,1]=4;

cout << "last int: " << myVector[3,1] << endl;

getch();

return 0;
}

prog69
پنج شنبه 19 شهریور 1388, 21:32 عصر
باسلام
به مشکلی بر خوردم لطفا کمک کنید
کامپایلر از cin و cout ایراد می گیره
من با visual C++ برنامه می نویسم.‎

#include<iostream>
#include<conio.h>
#include<iomanip>
#include<Vector>
using namespace std;
int main()
{
vector <int> list( 4, 5);
int i, j;
for( i = 0; i < 4; i++ )
for( j = 0; j < 5; j++ )
cin >> list[ i ][ j ]; //?????
for( i = 0; i < 4; i++ )
for( j = 0; j < 5; j++ )
cout << list[ i ][ j ];//???????
return 0;
}

deopen
پنج شنبه 19 شهریور 1388, 23:01 عصر
شما به کدی که براتون ضمیمه کردم دقت نکردید .
درستش این هست :


list[i,j]

prog69
جمعه 20 شهریور 1388, 04:43 صبح
با سلام
ببخشید دوباره وقتتونو می گیرم
در رابطه با این کد این پیغام می آید
ERROR-> Expression:vector subscript out of range
به نظرتون مشکل چیه؟:متفکر:
int main()
{
vector <int> list( 6, 10);
list[ 5, 9 ] = 10;
cout << list[ 5, 9 ];
return 0;
}

Nima_NF
جمعه 20 شهریور 1388, 11:37 صبح
نمی دانم کدهایی که دوستان بیان کردند چطوری نوشتند!

در هر حال درستش این طوری هست:

وقتی می نویسید



vector <int> list( 6, 10);

یعنی یک وکتور با 6 خانه عنصر از نوع Int و محتویات اولیه آن ها نیز 10 می باشد.
پس اصلا vector به این شکل دوبعدی نیست که بخواهیم از [x,y] استفاده کنیم،یعنی این طور:



list[3] = 4;

احتمالا اگر در جایی چنین کدی دیدید احتمالا منظور نحوه خواندن به شکل دوبعدی بود، یعنی یک vector با 100 عنصر که برای خواندن از شیوه [10,10] استفاده شود.
ماهیت vector شبیه لیست پیوندی هست، که داده ها پشت سر هم هستند.

deopen
جمعه 20 شهریور 1388, 13:40 عصر
بله , حق با شماست.

deopen
جمعه 20 شهریور 1388, 13:47 عصر
شما میتوانید کلاس Array را بسط دهید و کلاسی مانند vector طراحی کنید به گونه ای که قادر به استفاده ی 2 بعدی از array هم باشید , اگر اصراری به استفاده از vector ندارید و مایلید , در تاپیک جداگانه به بحث در مورد بسط Array بپردازیم.

prog69
جمعه 20 شهریور 1388, 15:04 عصر
من وقتی vector رو یاد گرفتن به نظرم از Array بهتر رسید چون می شد به انتهای آن عضو اضافه کرد.
اگر به نظر شما می توانیم این کاربرد را در آرایه داشته باشیم در صورت امکان در تاپیک جدید آن را به بحث بگذاریم.
تشکر

Nima_NF
جمعه 20 شهریور 1388, 15:30 عصر
من وقتی vector رو یاد گرفتن به نظرم از Array بهتر رسید چون می شد به انتهای آن عضو اضافه کرد.
اگر به نظر شما می توانیم این کاربرد را در آرایه داشته باشیم در صورت امکان در تاپیک جدید آن را به بحث بگذاریم.
تشکر

اگر به امکانات تغییر تعداد عناصر احتیاج باشد، مطمئنا از آرایه بهتر هست.

تاجایی که می توانید برای اینکه کدهای تمیز تر بنویسید و راحت تر هم کار کنید برای چنین مواردی از همین کلاس های استاندارد STL استفاده کنید.
ضمنا اگر قصد دارید که میان عناصر هم چیزی اضافه کنید می توانید از list استفاده کنید:



#include <list>

list <int> myList(10, 1); // 10 elements with value of 1
list <int>::iterator Iter;

Iter = c1.begin( );
Iter += 4;

myList.insert( Iter, 5 ); // insert number 5 in position 4

deopen
جمعه 20 شهریور 1388, 18:26 عصر
من وقتی vector رو یاد گرفتن به نظرم از Array بهتر رسید چون می شد به انتهای آن عضو اضافه کرد.
اگر به نظر شما می توانیم این کاربرد را در آرایه داشته باشیم در صورت امکان در تاپیک جدید آن را به بحث بگذاریم.
تشکر

بله این قابلیت را هم دارد , شما تاپیکی با عنوان بسط کلاس array ایجاد کنید , من تا آخر امشب کد کلاس array بسط یافته را بصورتی که امکان استفاده 2 بعدی و تغییر تعداد عنصرها و تغییر بعد هم داشته باشد می نویسم, فقط در صورتی که امکانات دیگری هم می خواهید داشته باشد حتما متذکر شوید , با تشکر.