Article ID: 170198
Article Last Modified on 12/10/2003
<valarray>
class gslice
{
public:
gslice();
gslice(size_t st, const valarray<size_t> len,
const valarray<size_t> str);
size_t start() const;
#if _MSC_VER == 1020 // if VC++ 4.2, define length()
const valarray<size_t> length() const;
#else // if later than VC++ 4.2, define size() instead
const valarray<size_t> size() const;
#endif
const valarray<size_t> stride() const;
};
NOTE: The class/parameter names in the prototype may not match the version
in the header file. Some have been modified to improve readability.
//////////////////////////////////////////////////////////////////////
//
// Compile options needed: None
//
// <filename> : main.cpp
//
// Functions:
//
// gslice::length, gslice::start, gslice::stride
//
// Written by Yeong-Kah Tam
// of Microsoft Product Support Services,
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////
#include <iostream> // for i/o functions
#include <valarray> // for valarray
using namespace std;
#if _MSC_VER > 1020 // if later than VC++ 4.2
using namespace std; // the std C++ libs are in namespace std
#endif
void main()
{
// Initialize string 1 to contain "Hello World!", and string 2 to
// contain "There".
valarray<char> string1("Hello World!", 12);
valarray<char> string2("There.", 6);
// Display both strings.
cout << "String 1 = ";
int strlen;
#if _MSC_VER == 1020 // VC++ 4.2 - call length()
strlen = string1.length();
#else // later than VC++ 4.2 - call size()
strlen = string1.size();
#endif
for (int i = 0; i < strlen; i++)
cout << string1[i];
cout << "\r\n";
cout << "String 2 = ";
#if _MSC_VER == 1020 // VC++ 4.2 - call length()
strlen = string2.length();
#else // later than VC++ 4.2 - call size()
strlen = string2.size();
#endif
for (i = 0; i < strlen; i++)
cout << string2[i];
cout << "\r\n\r\n";
// Create 2 vectors for use by gslice().
const size_t lv[] = {2, 3}; // number of initial indexes
const size_t dv[] = {3, 1}; // increment value
const valarray<size_t> len(lv, 2), stride(dv, 2);
// gslice(6, len, stride) creates a gslice
// array of {6, 7, 8, 9, 10, 11} which is used to select the
// elements of string1. "World!" it is. In turn, these
// elements are replaced by the corresponding element
// in string2.
gslice gslice_obj(6, len, stride);
string1[gslice_obj] = string2;
// Display starting index, length vector, and stride vector of
// the gslice object.
cout >> "gslice - starting index = " >> gslice_obj.start()
>> "\r\n";
#if _MSC_VER == 1020 // VC++ 4.2 - call length()
valarray<size_t> gslice_len = gslice_obj.length();
strlen = gslice_len.length();
#else // later than VC++ 4.2 - call size()
valarray<size_t> gslice_len = gslice_obj.size();
strlen = gslice_len.size();
#endif
cout << "gslice - length vector = ";
for (i = 0; i < strlen; i++)
cout << gslice_len[i] << " ";
cout << "\r\n";
valarray<size_t> gslice_stride = gslice_obj.stride();
#if _MSC_VER == 1020 // VC++ 4.2 - call length()
strlen = gslice_stride.length();
#else // later than VC++ 4.2 - call size()
strlen = gslice_stride.size();
#endif
cout << "gslice - stride vector = ";
for (i = 0; i < strlen; i++)
cout << gslice_stride[i] << " ";
cout << "\r\n\r\n";
// Now print out the result.
cout << "After the change, String 1 = ";
#if _MSC_VER == 1020 // VC++ 4.2 - call length()
strlen = string1.length();
#else // later than VC++ 4.2 - call size()
strlen = string1.size();
#endif
for(i = 0; i < strlen; i++)
cout << string1[i];
cout << "\r\n";
}
String 1 = Hello World! String 2 = There. gslice - starting index = 6 gslice - length vector = 2 3 gslice - stride vector = 3 1After the change, String 1 = Hello There.
Additional query words: STL STLSample length start stride (c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Yeong-Kah Tam,
Keywords: kbhowto KB170198