(转) Data structures
Data structures
A data structure is a group of data elements grouped together under one name. These data elements, known asmembers, can have different types and different lengths. Data structures can be declared in C++ using the following syntax:
struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;
Where type_name
is a name for the structure type, object_name
can be a set of valid identifiers for objects that have the type of this structure. Within braces {}
, there is a list with the data members, each one is specified with a type and a valid identifier as its name.
For example:
struct product { int weight; double price; } ; product apple; product banana, melon;
This declares a structure type, called product
, and defines it having two members: weight
and price
, each of a different fundamental type. This declaration creates a new type (product
), which is then used to declare three objects (variables) of this type: apple
, banana
, and melon
. Note how once product
is declared, it is used just like any other type.
Right at the end of the struct
definition, and before the ending semicolon (;
), the optional field object_names
can be used to directly declare objects of the structure type. For example, the structure objects apple
, banana
, and melon
can be declared at the moment the data structure type is defined:
struct product { int weight; // 声明 属性 。structure type name double price; } apple, banana, melon; // 声明 物品。object of this type
In this case, where object_names
are specified, the type name (product
) becomes optional: struct
requires either atype_name
or at least one name in object_names
, but not necessarily both.
It is important to clearly differentiate between what is the structure type name (product
), and what is an object of this type (apple
, banana
, and melon
). Many objects (such as apple
, banana
, and melon
) can be declared from a single structure type (product
).
Once the three objects of a determined structure type are declared (apple
, banana
, and melon
) its members can be accessed directly. The syntax for that is simply to insert a dot (.
) between the object name and the member name. For example, we could operate with any of these elements as if they were standard variables of their respective types:
apple.weight apple.price banana.weight banana.price melon.weight melon.price
Each one of these has the data type corresponding to the member they refer to: apple.weight
, banana.weight
, andmelon.weight
are of type int
, while apple.price
, banana.price
, and melon.price
are of type double
.
Here is a real example with structure types in action:
// example about structures
|
Enter title: Alien Enter year: My favorite movie is: A Space Odyssey () And yours is: Alien ()
|
The example shows how the members of an object act just as regular variables. For example, the member yours.year
is a valid variable of type int
, and mine.title
is a valid variable of type string
.
But the objects mine
and yours
are also variables with a type (of type movies_t
). For example, both have been passed to function printmovie
just as if they were simple variables. Therefore, one of the features of data structures is the ability to refer to both their members individually or to the entire structure as a whole. In both cases using the same identifier: the name of the structure.
Because structures are types, they can also be used as the type of arrays to construct tables or databases of them:
// array of structures
|
Enter title: Blade Runner Enter year: Enter title: The Matrix Enter year: Enter title: Taxi Driver Enter year: You have entered these movies: Blade Runner () The Matrix () Taxi Driver ()
|
Pointers to structures
Like any other type, structures can be pointed to by its own type of pointers:
struct movies_t { string title; int year; }; movies_t amovie; movies_t * pmovie;
|
Here amovie
is an object of structure type movies_t
, and pmovie
is a pointer to point to objects of structure typemovies_t
. Therefore, the following code would also be valid:
pmovie = &amovie;
The value of the pointer pmovie
would be assigned the address of object amovie
.
Now, let's see another example that mixes pointers and structures, and will serve to introduce a new operator: the arrow operator (->
):
// pointers to structures
|
Enter title: Invasion of the body snatchers Enter year: You have entered: Invasion of the body snatchers ()
|
The arrow operator (->
) is a dereference operator that is used exclusively with pointers to objects that have members. This operator serves to access the member of an object directly from its address. For example, in the example above:
pmovie->title
(*pmovie).title
Both expressions, pmovie->title
and (*pmovie).title
are valid, and both access the member title
of the data structure pointed by a pointer called pmovie
. It is definitely something different than:
|
|
which is rather equivalent to:
|
|
This would access the value pointed by a hypothetical pointer member called title
of the structure object pmovie
(which is not the case, since title
is not a pointer type). The following panel summarizes possible combinations of the operators for pointers and for structure members:
Expression | What is evaluated | Equivalent |
---|---|---|
a.b |
Member b of object a |
|
a->b |
Member b of object pointed to by a |
(*a).b |
*a.b |
Value pointed to by member b of object a |
*(a.b) |
Nesting structures
Structures can also be nested in such a way that an element of a structure is itself another structure:
struct movies_t { string title; int year; }; struct friends_t { string name; string email; movies_t favorite_movie; } charlie, maria; friends_t * pfriends = &charlie;
After the previous declarations, all of the following expressions would be valid:
charlie.name maria.favorite_movie.title charlie.favorite_movie.year pfriends->favorite_movie.year
(where, by the way, the last two expressions refer to the same member).
(转) Data structures的更多相关文章
- A library of generic data structures
A library of generic data structures including a list, array, hashtable, deque etc.. https://github. ...
- The Swiss Army Knife of Data Structures … in C#
"I worked up a full implementation as well but I decided that it was too complicated to post in ...
- 剪短的python数据结构和算法的书《Data Structures and Algorithms Using Python》
按书上练习完,就可以知道日常的用处啦 #!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving wit ...
- Persistent Data Structures
原文链接:http://www.codeproject.com/Articles/9680/Persistent-Data-Structures Introduction When you hear ...
- Go Data Structures: Interfaces
refer:http://research.swtch.com/interfaces Go Data Structures: Interfaces Posted on Tuesday, Decembe ...
- Choose Concurrency-Friendly Data Structures
What is a high-performance data structure? To answer that question, we're used to applying normal co ...
- 无锁数据结构(Lock-Free Data Structures)
一个星期前,我写了关于SQL Server里闩锁(Latches)和自旋锁(Spinlocks)的文章.2个同步原语(synchronization primitives)是用来保护SQL Serve ...
- [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构
10.2 How would you design the data structures for a very large social network like Facebook or Linke ...
- Manipulating Data Structures
Computer Science An Overview _J. Glenn Brookshear _11th Edition We have seen that the way data struc ...
- Objects and Data Structures
Date Abstraction Hiding implementation is not just a matter of putting a layer of fucntions between ...
随机推荐
- hdu 素数环
算法:搜索 题意:相邻的两个数之和是素数,别忘了最后一个,和第一个 Problem Description A ring is compose of n circles as shown in dia ...
- Android电子书翻页效果实现
这篇文章是在参考了别人的博客基础上,修改了其中一个翻页bug,并且加了详细注释 先看效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blog.csdn.net/hmg2 ...
- meta便签的用法
1.定义编码规则,<meta http-equiv="Content-Type" content="text/html; charset=utf-8" / ...
- [JS]九种网页弹窗代码
[1.最基本的弹出窗口代码] 其实代码非常简单: <SCRIPT LANGUAGE="javascript"><!--window.open ("pag ...
- python爬虫下载youtube单个视频
__author__ = 'Sentinel'import requestsimport reimport jsonimport sysimport shutilimport urlparse &qu ...
- python中的StringIO模块
python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...
- C语言--位运算符
一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010, 7用二进制表示为0111.对两个数值进行&a ...
- Scala学习文档-列表的使用
注:列表是不可变的,不能通过赋值改变列表的元素 列表具有递归结构,数组是连续的 scala里的列表类型是协变的? --> scala中的逆变与协变 分治原则 //自定义实现:::操作符 def ...
- c# 菜单无限极分类-利用递归
表结构: 前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Web ...
- CloudStack cloud数据库op_host_capacity表type与控制板上的内容的对应关系
listCapacity: type 名称 0 内存 1 CPU 3 主存储 4 公用IP地址 5 管理类IP地址 6 辅助存储 7 VLAN 9 本地存储 ViewResponseHelper.ja ...