Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 1063285
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T18:45:43+00:00 2026-05-16T18:45:43+00:00

Simple example: template <class P> class MyT { struct Item { public: Item() {}

  • 0

Simple example:

template <class P> class MyT
{
    struct Item
    {
    public:
        Item() {}
        P *pData;
        Item *next;
    };
    Item *head;
public:
    ...adding etc..
    P* operator [](int index)
    {
       See question below:
    }
};

Can I somehow make sure that the ‘Item’s are allocated in such a way that I can calculate the offset as follows: (@Steve:) Maybe not so clear here; what I need is a quick & easy way to get to the item without iterating through 10000 next’s.

Item *pi = head + (sizeof(Item) * (index - 1));

A (clearer?) explanation of what I mean

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T18:45:44+00:00Added an answer on May 16, 2026 at 6:45 pm

    Depends what you mean by “etc”, in “adding, etc”.

    If “etc” includes, “removing”, then you have the obvious problem that if you remove something in the middle of your list, then to maintain the indexing you have to shift everything after it downwards, which means updating all the next pointers.

    I think perhaps you have simplified your example too far. If you require contiguous storage, use a vector (either of P, or of Item if there’s something useful in Item that you’ve removed). If you have contiguous storage, then there’s no benefit in having a next pointer, since you could just calculate it in Item, by adding 1 to this (then checking a bound to make sure you haven’t reached the end).

    If you absolutely need the public next pointer field, because it’s part of some interface you’re implementing that you can’t change, then you could update it in the copy constructor and operator= for Item, and the interface had better forbid clients from writing to it.

    There’s no way to tell the memory allocator to allocate contiguous storage for separate allocations, if that’s what you’re asking. How would that even work? What if when you come to allocate, the “next” address is already occupied? What if the allocator imposes some overhead, for its own control structures (as almost all general-purpose allocators do), so that allocating an Item requires more than sizeof(Item) bytes? You can get the behaviour you want for a while with a fixed-size allocator, but eventually it needs a new block, or you delete something, and the relationship no longer holds.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Consider this simple example: template <class Type> class smartref { public: smartref() : data(new
So I have a simple struct used for template definitions. template<class T> struct EventListener
Suppose I have a simple class that Adds: public class Multiply { public int
Here's a simple example: class bar {}; template <typename> class foo {}; template <>
A simple example: template<typename _X> // this template parameter should be usable outside! struct
I have a simple template example that is as follow: template<class T> class A
Let me demonstrate with a simple example: class A { public: A() { cout
The line below is completely failing. template: _.template($('#test').html()), Trying to follow a simple example
Very simple example: #include <string> #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int argc,
Please consider this -probably poorly written- example : class Command; class Command : public

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.