C++ Tutorial/vector/vector access
Содержание
access field for vector
<source lang="cpp">#include <vector>
- include <string>
using namespace std; int main(int argc, char** argv) {
vector<string> stringVector(10, "hello"); for (vector<string>::iterator it = stringVector.begin();it != stringVector.end(); ++it) { it->append(" there"); }
}</source>
Bidirectional random access iterators
<source lang="cpp">#include <vector>
- include <iostream>
using namespace std; vector<double> makevector(int size){
vector<double> result; for (int i=1; i<=size; i++) { result.push_back(double(i)); } return result;
} void print(const vector<double>& l) {
cout << "Size of vector is: " << l.size() << endl; vector<double>::const_iterator i; for (i=l.begin(); i!=l.end(); i++) { cout << (*i) << " "; } cout << endl;
} int main() {
vector<double> vector1=makevector(5); vector<double>::iterator bi; // Traverse random cout << "Traverse random" << endl; bi=vector1.begin(); cout << *bi << " "; // First element cout << *(bi+=3) << " "; // 1+3 is 4th element cout << *(bi-=1) << " "; // 4-1 is third element cout << bi[-1] << " "; // 3-1 is second element cout << bi[1] << endl << endl; // 3+1 is fourth element // Create bidirectional iterator vector<double>::reverse_iterator ri; // Traverse reverse random cout << "Traverse reverse random" << endl; cout << *ri << " "; // First element cout << *(ri+=3) << " "; // 1+3 is 4th element cout << *(ri-=1) << " "; // 4-1 is third element cout << ri[-1] << " "; // 3-1 is second element cout << ri[1] << endl << endl; // 3+1 is fourth element
}</source>
Checked and Unchecked Access of a Vector
<source lang="cpp">#include <iostream>
- include <vector>
using namespace std; // comment next line out when debugging
- define NDEBUG
class Ship {
public: Ship( const float cargo_weight[], int length ); float operator[]( int index ) const; // REQUIRE: 0 <= index < cargo_loads() // RETURN: weight of load with specified index int cargo_loads() const; private: vector<float> weight_; }; inline Ship::Ship( const float weight[], int length ) : weight_( weight, weight+length ) {} // empty inline float Ship::operator[]( int index ) const { #ifdef NDEBUG return weight_[index]; // don"t check range when not debugging #else return weight_.at( index ); // check range when debugging #endif } inline int Ship::cargo_loads() const { return static_cast<int>( weight_.size() ); } int main( ) { const int num_loads = 3; const float weights[num_loads] = { 40.8f, 35.2f, 22.1f }; // make a ship and load it with cargo Ship ship( weights, num_loads ); }</source>
Random access of a vector
<source lang="cpp">#include <iostream>
- include <vector>
- include <algorithm>
- include <ctime>
- include <cstdlib>
using namespace std; int main() {
vector<int>::const_iterator iter; vector<int> scores; scores.push_back(1500); scores.push_back(3500); scores.push_back(7500); srand(time(0)); random_shuffle(scores.begin(), scores.end()); for (iter = scores.begin(); iter != scores.end(); ++iter) cout << *iter << endl; sort(scores.begin(), scores.end()); for (iter = scores.begin(); iter != scores.end(); ++iter) cout << *iter << endl; return 0;
}</source>
the use of the subscripting operator
<source lang="cpp">#include <iostream>
- include <vector>
using namespace std; void show(const char *msg, vector<int> vect); int main() {
// Declare a vector that has an initial capacity of 10. vector<int> v(10); for(unsigned i=0; i < v.size(); ++i) v[i] = i*i; show("Contents of v: ", v); // the use of the subscripting operator. int sum = 0; for(unsigned i=0; i < v.size(); ++i) sum += v[i]; double avg = sum / v.size(); cout << "The average of the elements is " << avg << "\n\n"; return 0;
} // Display the contents of a vector<int>. void show(const char *msg, vector<int> vect) {
cout << msg; for(unsigned i=0; i < vect.size(); ++i) cout << vect[i] << " "; cout << "\n";
}</source>