Showing posts with label technical report writing template free. Show all posts
Showing posts with label technical report writing template free. Show all posts

Friday, 8 July 2011

Technical Report Writing Template

technical report writing template"technical report writing template"

Standard Template Library

Overview



Please help improve this article by adding reliable references. Unsourced material may be challenged and removed. (September 2007)



The STL provides a ready-made set of common classes for C++, such as containers and associative arrays, that can be used with any built-in type and with any user-defined type that supports some elementary operations (such as copying and assignment). STL algorithms are independent of containers, which significantly reduces the complexity of the library.



The STL achieves its results through the use of templates. This approach provides compile-time polymorphism that is often more efficient than traditional run-time polymorphism. Modern C++ compilers are tuned to minimize any abstraction penalty arising from heavy use of the STL.



The STL was created as the first library of generic algorithms and data structures for C++, with four ideas in mind: generic programming, abstractness without loss of efficiency, the Von Neumann computation model, and value semantics.



Contents



Containers



The STL contains sequence containers and associative containers. The standard sequence containers include vector, deque, and list. The standard associative containers are set, multiset, map, and multimap. There are also container adaptors queue, priority_queue, and stack, that are containers with specific interface, using other containers as implementation.



Container



Description



Sequences (Arrays / Linked Lists) - ordered collections



vector



a dynamic array, like C array (i.e., capable of random access) with the ability to resize itself automatically when inserting or erasing an object. Inserting and removing an element to/from back of the vector at the end takes amortized constant time. Inserting and erasing at the beginning or in the middle is linear in time.



A specialization for type bool exists, which optimizes for space by storing bool values as bits.



list



a doubly-linked list; elements are not stored in contiguous memory. Opposite performance from a vector. Slow lookup and access (linear time), but once a position has been found, quick insertion and deletion (constant time).



deque (double ended queue)



a vector with insertion/erase at the beginning or end in amortized constant time, however lacking some guarantees on iterator validity after altering the deque.



Container adaptors



queue



Provides FIFO queue interface in terms of push/pop/front/back operations.



Any sequence supporting operations front(), back(), push_back(), and pop_front() can be used to instantiate queue (e.g. list and deque).



priority_queue



Provides priority queue interface in terms of push/pop/top operations (the element with the highest priority is on top).



Any random-access sequence supporting operations front(), push_back(), and pop_front() can be used to instantiate priority_queue (e.g. vector and deque).



Elements should additionally support comparison (to determine which element has a higher priority and should be popped first).



stack



Provides LIFO stack interface in terms of push/pop/top operations (the last-inserted element is on top).



Any sequence supporting operations back(), push_back(), and pop_back() can be used to instantiate stack (e.g. vector, list, and deque).



Associative containers - unordered collections



set



a mathematical set; inserting/erasing elements in a set does not invalidate iterators pointing in the set. Provides set operations union, intersection, difference, symmetric difference and test of inclusion. Type of data must implement comparison operator < or custom comparator function must be specified. Implemented using a self-balancing binary search tree.



multiset



same as a set, but allows duplicate elements.



map



an associative array; allows mapping from one data item (a key) to another (a value). Type of key must implement comparison operator < or custom comparator function must be specified. Implemented using a self-balancing binary search tree.



multimap



same as a map, but allows duplicate keys.



hash_set



hash_multiset



hash_map



hash_multimap



similar to a set, multiset, map, or multimap, respectively, but implemented using a hash table; keys are not ordered, but a hash function must exist for the key type. These containers are not part of the C++ Standard Library, but are included in SGI's STL extensions, and are included in common libraries such as the GNU C++ Library in the __gnu_cxx namespace. These are scheduled to be added to the C++ standard as part of TR1, with the slightly different names of unordered_set, unordered_multiset, unordered_map and unordered_multimap.



Other types of containers



bitset



stores series of bits similar to a fixed-sized vector of bools. Implements bitwise operations and lacks iterators. Not a Sequence.



valarray



another C-like array like vector, but is designed for high speed numerics at the expense of some programming ease and general purpose use. It has many features that make it ideally suited for use with vector processors in traditional vector supercomputers and SIMD units in consumer-level scalar processors, and also ease vector mathematics programming even in scalar computers.



Iterators



The STL implements five different types of iterators. These are input iterators (which can only be used to read a sequence of values), output iterators (which can only be used to write a sequence of values), forward iterators (which can be read, written to, and move forward), bidirectional iterators (which are like forward iterators but can also move backwards) and random access iterators (which can move freely any number of steps in one operation).



It is possible to have bidirectional iterators act like random access iterators, as moving forward ten steps could be done by simply moving forward a step at a time a total of ten times. However, having distinct random access iterators offers efficiency advantages. For example, a vector would have a random access iterator, but a list only a bidirectional iterator.



Iterators are the major feature which allow the generality of the STL. For example, an algorithm to reverse a sequence can be implemented using bidirectional iterators, and then the same implementation can be used on lists, vectors and deques. User-created containers only have to provide an iterator which implements one of the 5 standard iterator interfaces, and all the algorithms provided in the STL can be used on the container.



This generality also comes at a price at times. For example, performing a search on an associative container such as a map or set can be much slower using iterators than by calling member functions offered by the container itself. This is because an associative container's methods can take advantage of knowledge of the internal structure, which is opaque to algorithms using iterators.



Algorithms



A large number of algorithms to perform operations such as searching and sorting are provided in the STL, each implemented to require a certain level of iterator (and therefore will work on any container which provides an interface by iterators).



Functors



The STL includes classes that overload the function operator (operator()). Classes that do this are called functors or function objects. They are useful for keeping and retrieving state information in functions passed into other functions. Regular function pointers can also be used as functors.



A particularly common type of functor is the predicate. For example, algorithms like find_if take a unary predicate that operates on the elements of a sequence. Algorithms like sort, partial_sort, nth_element and all sorted containers use a binary predicate which must provide a strict weak ordering, that is, it must behave like a membership test on a transitive, irreflexive and antisymmetric binary relation. If none is supplied, these algorithms and containers use less by default, which in turn calls the less-than-operator <.



Criticisms



Quality of compiler



The Quality of Implementation (QoI) of the C++ compiler has a large impact on usability of STL (and templated code in general):



Error messages involving templates tend to be very long and difficult to decipher. This problem has been considered so severe that a number of tools have been written which simplify and prettyprint STL-related error messages to make them more comprehensible.



Careless use of STL templates can lead to code bloat. This has been countered with special techniques within STL implementation (using void* containers internally) and by improving optimization techniques used by compilers.



Template instantiation tends to increase compilation time and memory usage (even by an order of magnitude). Until the compiler technology improves enough this problem can be only partially eliminated by very careful coding and avoiding certain idioms.



STL design issues



1. Design flaws due to limitations in the C++ language



Initialization of STL containers with constants within the source code is not as easy as data structures inherited from C (addressed in C++0x with initializer lists).



2. Perceived flaws due to the requirement to maximize speed and minimize space usage



STL containers are not intended to be used as base classes (their destructors are deliberately non-virtual); deriving from a container is a common mistake.



3. Other flaws, caused either by trade-offs in design or which have become more visible over time



The concept of iterators as implemented by STL can be difficult to understand at first: for example, if a value pointed to by the iterator is deleted, the iterator itself is then no longer valid. This is a common source of errors. Most implementations of the STL provide a debug mode which is slower but can locate such errors if used. However, at present no better replacement for iterators has been suggested and a similar problem exists in other languages, for example Java.



Certain iteration patterns do not map to the STL iterator model. For example, callback enumeration APIs cannot be made to fit the STL model without the use of coroutines, which are platform-dependent and/or unavailable, and are outside the C++ standard.



Compiler compliance does not guarantee that Allocator objects, used for memory management for containers, will work with state dependent behavior. For example, a portable library can't define an allocator type that will pull memory from different pools using different allocator objects of that type. (Meyers, p. 50)



The set of algorithms is not complete for example, the copy_if algorithm was left out by oversight (Stroustrup, p. 530) (added in C++0x: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2666.pdf).



The interface of some containers (in particular string) is bloated (Sutter and Alexandrescu, p. 79); others are considered insufficient.



Hashing containers were left out of the original standard, but have been added in Technical Report 1, a recent extension to C++.



History



The architecture of STL is largely the creation of one person, Alexander Stepanov. In 1979 he began working out his initial ideas of generic programming and exploring their potential for revolutionizing software development. Although David Musser had developed and advocated some aspects of generic programming already by year 1971, it was limited to a rather specialized area of software development (computer algebra).



Stepanov recognized the full potential for generic programming and persuaded his then-colleagues at General Electric Research and Development (including, primarily, David Musser and Deepak Kapur) that generic programming should be pursued as a comprehensive basis for software development. At the time there was no real support in any programming language for generic programming.



The first major language to provide such support was Ada, with its generic units feature. By 1987 Stepanov and Musser had developed and published an Ada library for list processing that embodied the results of much of their research on generic programming. However, Ada had not achieved much acceptance outside the defense industry and C++ seemed more likely to become widely used and provide good support for generic programming even though the language was relatively immature. Another reason for turning to C++, which Stepanov recognized early on, was the C/C++ model of computation which allows very flexible access to storage via pointers is crucial to achieving generality without losing efficiency.



Much research and experimentation were needed, not just to develop individual components, but to develop an overall architecture for a component library based on generic programming. First at AT&T Bell Laboratories and later at Hewlett-Packard Research Labs, Stepanov experimented with many architectural and algorithm formulations, first in C and later in C++. Musser collaborated in this research and in 1992 Meng Lee joined Stepanov's project at HP and became a major contributor.



This work undoubtedly would have continued for some time being just a research project or at best would have resulted in an HP proprietary library if Andrew Koenig of Bell Labs had not become aware of the work and asked Stepanov to present the main ideas at a November 1993 meeting of the ANSI/ISO committee for C++ standardization. The committee's response was overwhelmingly favorable and led to a request from Koenig for a formal proposal in time for the March 1994 meeting. Despite the tremendous time pressure, Alex and Meng were able to produce a draft proposal that received preliminary approval at that meeting.



The committee had several requests for changes and extensions (some of them major), and a small group of committee members met with Stepanov and Lee to help work out the details. The requirements for the most significant extension (associative containers) had to be shown to be consistent by fully implementing them, a task Stepanov delegated to Musser. It would have been quite easy for the whole enterprise to spin out of control at this point, but again Stepanov and Lee met the challenge and produced a proposal that received final approval at the July 1994 ANSI/ISO committee meeting. (Additional details of this history can be found in Stevens.) Subsequently, the Stepanov and Lee document 17 was incorporated into the ANSI/ISO C++ draft standard (1, parts of clauses 17 through 27). It also influenced other parts of the C++ Standard Library, such as the string facilities, and some of the previously adopted standards in those areas were revised accordingly.



In spite of STL's success with the committee, there remained the question of how STL would make its way into actual availability and use. With the STL requirements part of the publicly available draft standard, compiler vendors and independent software library vendors could of course develop their own implementations and market them as separate products or as selling points for their other wares. One of the first edition's authors, Atul Saini, was among the first to recognize the commercial potential and began exploring it as a line of business for his company, Modena Software Incorporated, even before STL had been fully accepted by the committee.



The prospects for early widespread dissemination of STL were considerably improved with Hewlett-Packard's decision to make its implementation freely available on the Internet in August 1994. This implementation, developed by Stepanov, Lee, and Musser during the standardization process, became the basis of many implementations offered by compiler and library vendors today.



List of STL implementations



libstdc++ from gnu (was part of libg++)



STLPort, based on SGI STL



Rogue Wave standard library (HP, SGI, SunSoft, Siemens-Nixdorf)



Dinkum STL library by P.J. Plauger



Notes



^ Meyers, Scott (2005). Effective C++ Third Edition - 55 Specific Ways to Improve Your Designs. Addison Wesley. ISBN 0-321-33487-6. 



^ Sutter, Herb; Alexandrescu, Andrei (2004). C++ Coding Standards: 101 Rules, Guidelines, and Best Practices. Addison-Wesley. 



See also



List of C++ template libraries



C++0x



Boost C++ Libraries



References



Alexander Stepanov and Meng Lee, The Standard Template Library. HP Laboratories Technical Report 95-11(R.1), November 14, 1995. (Revised version of A. A. Stepanov and M. Lee: The Standard Template Library, Technical Report X3J16/94-0095, WG21/N0482, ISO Programming Language C++ Project, May 1994.)



Alexander Stepanov (2007) (PDF). Notes on Programming. http://www.stepanovpapers.com/notes.pdf.  Stepanov reflects about the design of the STL.



Nicolai M. Josuttis (2000). The C++ Standard Library: A Tutorial and Reference. Addison-Wesley. ISBN 0-201-37926-0. 



Scott Meyers (2001). Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Addison-Wesley. ISBN 0-201-74962-9. 



Al Stevens (March 1995). "Al Stevens Interviews Alex Stepanov". Dr. Dobb's Journal. http://www.sgi.com/tech/stl/drdobbs-interview.html. Retrieved 2007-07-18. 



Bjarne Stroustrup (2000). The C++ Programming Language (3rd ed.). Addison-Wesley. ISBN 0-201-70073-5. 



Herb Sutter and Andrei Alexandrescu (2005). C++ Coding Standards. Addison-Wesley. ISBN 0-321-11358-6. 



David Vandevoorde and Nicolai M. Josuttis (2002). C++ Templates: The Complete Guide. Addison-Wesley Professional. ISBN 0-201-73484-2. 



Matthew Wilson (February 2004). "Callback Enumeration APIs & the Input Iterator Concept". Dr. Dobb's Journal. http://www.ddj.com/cpp/184401766. 



Atul Saini and David R. Musser, STL Tutorial and Reference Guide: C+ + Programming with the Standard Template Library. Foreword by Alexander Stepanov; [Copyright Modena Software Inc.] Addison-Wesley ISBN 0-201-63398-1



External links



STL programmer's guide official guide from SGI



STL Reference lists STL containers and their members



C/C++ reference includes a section on the STL



Apache (formerly Rogue Wave) C++ Standard Library Class Reference



Apache (formerly Rogue Wave) C++ Standard Library User Guide



Bjarne Stroustrup on The emergence of the STL (Page 5, Section 3.1)



STLPort, a very popular open-source implementation of the STL



Categories: C++ standard library | Generic programmingHidden categories: Articles needing additional references from September 2007 | All articles needing additional references | Wikipedia articles needing style editing from April 2008 | All articles needing style editing | Articles lacking in-text citations from April 2009 | All articles lacking in-text citations
About the Author

I am a professional writer from China Quality Lighting, which contains a great deal of information about fertilizer fish emulsion , wholesale spray paint, welcome to visit!



Key Consideration when considering an HER









technical report writing template
technical report writing template

Wednesday, 5 January 2011

Technical Report Writing Template

technical report writing template_2"technical report writing template"

No. 1 Rule for Working with Subcontractors: Put It in Writing


Many growing IT companies find that working with subcontractors a great way to keep clients happy and overhead in check. Without having to bring on a full-time employee, IT companies can hire independent contractors on a per-project basis, extending their company’s scope and geographical reach, while giving clients part- or full-time support for a defined period of time.

But working with subcontractors isn’t without its hazards. Remember the old saying, “If you want the job done right, do it yourself”? The good news is, you can avoid many pitfalls by putting your expectations in writing, with both a detailed subcontract management plan and a legally binding 1099 independent contractor agreement signed by both you and your contractor.

Develop a Comprehensive Subcontract Management Plan

According to project management expert Karl Wiegers, a comprehensive plan for working with your freelance subcontractors should include as much information as possible about the project your subcontractor will be working on, from who will be involved to how conflicts and change requests will be resolved. For Karl Wiegers’ Subcontract Management Plan Template that you can use with your own projects, see the free downloads at the end of this article.

Wiegers suggests that you start with a brief overview of the project you’re outsourcing, including any issues or concerns that may require particular attention by your subcontractor. Next, clearly outline the human resources aspects of the project, including who will be involved, what their roles will be, who will serve as the principal points of contact, who will be the major decision-makers, and what processes those individuals will use in making decisions related to the project.

It’s also important to clarify in writing how you expect communications to be handled with the independent contractor. For example:

- Will you work primarily by phone, e-mail, videoconference, or face-to-face?
- How often, and in what level of detail, do you want to be updated on the project?
- Will you have scheduled technical peer reviews or management status meetings?
- If these communications will take place long-distance, how much will they cost?

Your subcontract management plan could also include a detailed strategy for project tracking and oversight. For example, you may want to consider:

- How often do you want to receive written status reports from the subcontractor?
- What should these reports contain?
- How often should your subcontractor provide updates to your client company, and in what form?
- What are the metrics by which the project will be measured (time, size, cost, defects, status)?
- Who will be responsible for managing risks, and how will risks be managed?
- How will commitments and issues be tracked and resolved?
- How often and when will periodic senior management reviews take place?

Another important consideration is to have a strategy in place should the project requirements change. For example, you may need to document a plan for submission and evaluation of requested changes during the project, as well as a process and team to make decisions about them.

Finally, you may wish to plan ahead for the final stages of the project by defining how a project will be considered completed, and establishing a transition plan for supporting the delivered product over the long-term. This part of the plan might also include a section on requirements tracing, so that you can ensure that every functional requirement is actually addressed by the final solution.

Subcontractor Contracts

It’s also critical to have a signed subcontractor agreement in place with any independent contractor you bring onto a project. Such contracts prevent the independent contractor from taking a job with your client, protect your company’s intellectual property, clearly define your subcontractor’s responsibilities, and include other provisions that can help to ensure a healthy ongoing relationship with your subcontractor.

To avoid costly legal fees, many smaller IT companies purchase standard 1099 independent contractor agreement form templates that can be used unlimited times for a single price. Then, they may pay for a lawyer or law student to review the completed contract; just to be sure all bases are covered.

The more information you can provide in writing up-front, the less confusion there will be as your subcontractor works to implement the project. Creating a clear subcontract management plan and agreement ultimately helps to ensure a smoother implementation, a stronger independent contractor relationship, and a happier client.



About the Author

Jim Cochran is the President and Founder of TechInsurance.com a website dedicated to quoting professional liability insurance for programmers. Jim understands the importance of proper errors and omissions coverage as a programmer or IT Professional. Let TechInsurance find you the best quote on liability insurance for techs.



Pre Supervisor Training









technical report writing template
technical report writing template
technical report writing template