www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Container access in std.container

reply Ishan Thilina <ishanthilina gmail.com> writes:
I know that D has some Containers implemented by default( such as a a List,
Red-black tree, Array). In C++ these data structures can be used as follows.

#include <vector>

int main(){

	std::vector<int> myVector;
	std::vector<int>::iterator myIterator;

}

Then I can use "myIterator" to manipulate "myVector".

But in D the containers are embedded in the std.container( as far as I
understood it) and I can't do "import std.container" too. So how can I access
the built in containers?

Thank you..!
Mar 28 2011
parent reply David Nadlinger <see klickverbot.at> writes:
On 3/28/11 4:17 PM, Ishan Thilina wrote:
 I know that D has some Containers implemented by default( such as a a List,
 Red-black tree, Array). In C++ these data structures can be used as follows.

 #include<vector>

 int main(){

 	std::vector<int>  myVector;
 	std::vector<int>::iterator myIterator;

 }

 Then I can use "myIterator" to manipulate "myVector".

 But in D the containers are embedded in the std.container( as far as I
 understood it) and I can't do "import std.container" too. So how can I access
 the built in containers?
Hi Ishan, First, to avoid confusion in further discussions, the term »built-in« is usually used when referring to the types which are part of the D language itself (e.g. the built-in arrays and associative arrays, i.e. int[] and int[string]). The types std.container, on the other hand, could be in any other library as well, so I wouldn't call them built-in, but rather just Phobos containers. What exactly do you mean by »I can't do "import std.container"«? Assuming you have a working D2 environment, you should be able to use them like this: --- import std.container; import std.stdio; void main() { auto rb = redBlackTree(4, 1, 2, 3); foreach (e; rb) { writeln(e); } } --- To get a range over all elements (in an container-defined order), use the slicing operator [], e.g. rb[] – if I remember correctly, the std.container ddoc page has more information on commonly supported operations. David
Mar 28 2011
next sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-28 07:48, David Nadlinger wrote:
 ---
 import std.container;
 import std.stdio;
 
 void main() {
      auto rb = redBlackTree(4, 1, 2, 3);
      foreach (e; rb) {
          writeln(e);
      }
 }
 ---
I believe that the redBlackTree function is only in the git repository at present (so, it'll be in the next release), so if he's using dmd 2.052, that particular way of creating a RedBlackTree won't work. - Jonatahn M Davis
Mar 28 2011
prev sibling parent reply Ishan Thilina <ishanthilina gmail.com> writes:
I am using DGC due to the problems I'm witnessing with DMD. I tried a similar
approach. But the following error comes.

"

structures.d:4: Error: module container cannot read file 'std/container.d'
import path[0] =
/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-linux-gnu
import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

"

I dont know what is wrong. I'll try to compile in Windows and let you know.

 David :

Thanks for the clarifications :)
Mar 28 2011
next sibling parent Ishan Thilina <ishanthilina gmail.com> writes:
I am using GDC due to the problems I'm witnessing with DMD. I tried a similar
approach. But the following error comes.

"

structures.d:4: Error: module container cannot read file 'std/container.d'
import path[0] =
/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-linux-gnu
import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

"

I dont know what is wrong. I'll try to compile in Windows and let you know.
A module std.container cannot be found error comes in windows too. I'm using GDC to compile in linux and DMD to compile in windows. I'm really confused about this :s
Mar 28 2011
prev sibling parent reply Steven Wawryk <stevenw acres.com.au> writes:
Your environment looks wrong.  Note that

/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

is equivalent to

/usr/include/d/4.3.5

so I expect it can't find container.d


On 29/03/11 04:54, Ishan Thilina wrote:
 I am using DGC due to the problems I'm witnessing with DMD. I tried a similar
 approach. But the following error comes.

 "

 structures.d:4: Error: module container cannot read file 'std/container.d'
 import path[0] =
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-linux-gnu
 import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

 "

 I dont know what is wrong. I'll try to compile in Windows and let you know.

  David :

 Thanks for the clarifications :)
Mar 28 2011
next sibling parent Ishan Thilina <ishanthilina gmail.com> writes:
Steven wrote:

Your environment looks wrong.  Note that

/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

is equivalent to

/usr/include/d/4.3.5

so I expect it can't find container.d
Really sorry for being a burden, I'm new to D. How can I fix this Environment?
Mar 28 2011
prev sibling next sibling parent Ishan Thilina <ishanthilina gmail.com> writes:
Your environment looks wrong.  Note that

/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

is equivalent to

/usr/include/d/4.3.5
I copied container.d to /usr/include/d/4.3.5/std . But the problem is still there :s
Mar 28 2011
prev sibling parent reply Ishan Thilina <ishanthilina gmail.com> writes:
== Quote from Steven Wawryk (stevenw acres.com.au)'s article
 Your environment looks wrong.  Note that
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5
 is equivalent to
 /usr/include/d/4.3.5
 so I expect it can't find container.d
 On 29/03/11 04:54, Ishan Thilina wrote:
 I am using DGC due to the problems I'm witnessing with DMD. I tried a similar
 approach. But the following error comes.

 "

 structures.d:4: Error: module container cannot read file 'std/container.d'
 import path[0] =
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-linux-gnu
 import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5

 "

 I dont know what is wrong. I'll try to compile in Windows and let you know.

  David :

 Thanks for the clarifications :)
structures.d:4: Error: module container cannot read file 'std/container.d'
import path[0] =
/usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-linux-gnu
import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5
Ok, now std.container can be imported inside windows. The problem has been that windows has used dmd to compile rather than using dmd2. But I get an error message. I think it's what davis said.
On 2011-03-28 07:48, David Nadlinger wrote:
 ---
 import std.container;
 import std.stdio;

 void main() {
      auto rb = redBlackTree(4, 1, 2, 3);
      foreach (e; rb) {
          writeln(e);
      }
 }
 ---
I believe that the redBlackTree function is only in the git repository at
present (so, it'll be in the next release), so if he's using dmd 2.052, that
particular way of creating a RedBlackTree won't work.
So how can I declare a redBlackTree..? It seems that there's no importing problem inside windows now. But the problem still there in Linux. I'm using GDC to compile.
Mar 29 2011
next sibling parent reply Ishan Thilina <ishanthilina gmail.com> writes:
So how can I declare a redBlackTree...?
I'm so sorry for being this much foolish. I found the way to do it( make a redBlackTree). Again I'm really sorry :-/. now all that is left is the problem with GDC. Why can't I do "import std.container" in Linux :(
Mar 29 2011
next sibling parent Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-29 01:45, Ishan Thilina wrote:
So how can I declare a redBlackTree...?
I'm so sorry for being this much foolish. I found the way to do it( make a redBlackTree). Again I'm really sorry :-/. now all that is left is the problem with GDC. Why can't I do "import std.container" in Linux :(
Unless you really need gdc, I'd just suggest using dmd. It's quite easy to get working. You just unzip it wherever you want it and add /path/to/unzipped/dmd2/linux/bin to your path, and it works. I have no clue what it takes to get gdc to work. And the only advantage to gdc I'm aware of is that its backend tends to generate more efficient code than dmd's currently does. - Jonathan M Davis
Mar 29 2011
prev sibling next sibling parent reply Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-29 01:45, Ishan Thilina wrote:
So how can I declare a redBlackTree...?
I'm so sorry for being this much foolish. I found the way to do it( make a redBlackTree). Again I'm really sorry :-/. now all that is left is the problem with GDC. Why can't I do "import std.container" in Linux :(
Unless you really need gdc, I'd just suggest using dmd. It's quite easy to get working. You just unzip it wherever you want it and add /path/to/unzipped/dmd2/linux/bin to your path, and it works. I have no clue what it takes to get gdc to work. And the only advantage to gdc I'm aware of is that its backend tends to generate more efficient code than dmd's currently does. - Jonathan M Davis
Mar 29 2011
parent reply Ishan Thilina <ishanthilina gmail.com> writes:
Unless you really need gdc, I'd just suggest using dmd. It's quite easy to get
working. You just unzip it wherever you want it and add
/path/to/unzipped/dmd2/linux/bin to your path, and it works. I have no clue
what it takes to get gdc to work. And the only advantage to gdc I'm aware of
is that its backend tends to generate more efficient code than dmd's currently
does.

- Jonathan M Davis
I'm using GDC because I can't use DMD in linux. I have started a seperate thread for that. Here it is. http://www.mail-archive.com/digitalmars-d-learn puremagic.com/msg11525.html
Mar 29 2011
parent spir <denis.spir gmail.com> writes:
On 03/29/2011 12:43 PM, Ishan Thilina wrote:

 I'm using GDC because I can't use DMD in linux. I have started a seperate
thread
 for that.
I'm using dmd on Linux without any issue. But only stable releases (several versions have passed). May I suggest you take some time to uninstall everything properly, then install again from scratch according to the online guidelines: downloads: http://www.digitalmars.com/d/download.html win: http://www.digitalmars.com/d/2.0/dmd-windows.html linux: http://www.digitalmars.com/d/2.0/dmd-linux.html Denis -- _________________ vita es estrany spir.wikidot.com
Mar 29 2011
prev sibling parent Daniel Green <venix1 gmail.com> writes:
On 3/29/2011 4:45 AM, Ishan Thilina wrote:
 now all that is left is the problem with GDC. Why can't I do "import
 std.container" in Linux :(
std.container is a D2 module. Based on your include path you have a D1 version of GDC. GDC uses include/d for D1 and include/d2 for D2.
Mar 29 2011
prev sibling parent reply Jonathan M Davis <jmdavisProg gmx.com> writes:
On 2011-03-29 01:38, Ishan Thilina wrote:
 == Quote from Steven Wawryk (stevenw acres.com.au)'s article
 
 Your environment looks wrong.  Note that
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5
 is equivalent to
 /usr/include/d/4.3.5
 so I expect it can't find container.d
 
 On 29/03/11 04:54, Ishan Thilina wrote:
 I am using DGC due to the problems I'm witnessing with DMD. I tried a
 similar approach. But the following error comes.
 
 "
 
 structures.d:4: Error: module container cannot read file
 'std/container.d' import path[0] =
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-
 linux-gnu import path[1] =
 /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5
 
 "
 
 I dont know what is wrong. I'll try to compile in Windows and let you
 know.
 
  David :
 
 Thanks for the clarifications :)
structures.d:4: Error: module container cannot read file 'std/container.d' import path[0] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5/x86_64-lin ux-gnu import path[1] = /usr/lib/gcc/x86_64-linux-gnu/4.3.5/../../../../include/d/4.3.5
Ok, now std.container can be imported inside windows. The problem has been that windows has used dmd to compile rather than using dmd2. But I get an error message. I think it's what davis said.
On 2011-03-28 07:48, David Nadlinger wrote:
 ---
 import std.container;
 import std.stdio;
 
 void main() {
 
      auto rb = redBlackTree(4, 1, 2, 3);
      foreach (e; rb) {
      
          writeln(e);
      
      }
 
 }
 ---
I believe that the redBlackTree function is only in the git repository at present (so, it'll be in the next release), so if he's using dmd 2.052, that particular way of creating a RedBlackTree won't work.
So how can I declare a redBlackTree..? It seems that there's no importing problem inside windows now. But the problem still there in Linux. I'm using GDC to compile.
I believe that you'd just do auto rb = RedBlackTree(4, 1, 2, 3); The problem with the version in dmd 2.052 though is that you can declare one if there isn't anything in it. Or at least, if you do, you'll run into problems, because it won't have been properly initialized (due to the lack of default constructor). The version in git (which can be gotten here if you want to try it out: https://github.com/D-Programming-Language/phobos/ - though given how much trouble that you've been having getting dmd to work, I'm not sure that you want to try building druntime and Phobos yourself) changes RedBlackTree to a class, which fixes the problem. And by adding the function redBlackTree, it manages to make creating one a lot more flexible. The current version should work just fine though. It just isn't quite as nice (but the first version of Phobos with RedBlackTree was either 2.051 or 2.052, so it's a quite recent addition to std.container). - Jonathan M Davis
Mar 29 2011
parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Tue, 29 Mar 2011 04:49:41 -0400, Jonathan M Davis <jmdavisProg gmx.com>  
wrote:

 On 2011-03-29 01:38, Ishan Thilina wrote:
 So how can I declare a redBlackTree..?
I believe that you'd just do auto rb = RedBlackTree(4, 1, 2, 3);
I think: auto rb = RedBlackTree!(int)(4, 1, 2, 3); But the version in git will be much nicer. -Steve
Mar 29 2011