1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Construct, copy, destruct</title> 5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Icl"> 8<link rel="up" href="../function_reference.html" title="Function Reference"> 9<link rel="prev" href="key_types.html" title="Key Types"> 10<link rel="next" href="containedness.html" title="Containedness"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="key_types.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function_reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="containedness.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="boost_icl.function_reference.construct__copy__destruct"></a><a class="link" href="construct__copy__destruct.html" title="Construct, copy, destruct">Construct, 28 copy, destruct</a> 29</h3></div></div></div> 30<div class="informaltable"><table class="table"> 31<colgroup> 32<col> 33<col> 34<col> 35<col> 36<col> 37<col> 38</colgroup> 39<thead><tr> 40<th> 41 <p> 42 <span class="emphasis"><em><span class="bold"><strong>Construct, copy, destruct</strong></span></em></span> 43 </p> 44 </th> 45<th> 46 <p> 47 intervals 48 </p> 49 </th> 50<th> 51 <p> 52 interval<br> sets 53 </p> 54 </th> 55<th> 56 <p> 57 interval<br> maps 58 </p> 59 </th> 60<th> 61 <p> 62 element<br> sets 63 </p> 64 </th> 65<th> 66 <p> 67 element<br> maps 68 </p> 69 </th> 70</tr></thead> 71<tbody> 72<tr> 73<td> 74 <p> 75 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">()</span></code> 76 </p> 77 </td> 78<td> 79 <p> 80 1 81 </p> 82 </td> 83<td> 84 <p> 85 1 86 </p> 87 </td> 88<td> 89 <p> 90 1 91 </p> 92 </td> 93<td> 94 <p> 95 1 96 </p> 97 </td> 98<td> 99 <p> 100 1 101 </p> 102 </td> 103</tr> 104<tr> 105<td> 106 <p> 107 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&)</span></code> 108 </p> 109 </td> 110<td> 111 <p> 112 A 113 </p> 114 </td> 115<td> 116 <p> 117 <a class="link" href="../interface/function_synopsis.html#element_type"><span class="bold"><strong>e</strong></span></a> 118 <a class="link" href="../interface/function_synopsis.html#interval_type"><span class="bold"><strong>i</strong></span></a> 119 <a class="link" href="../interface/function_synopsis.html#interval_set_types"><span class="bold"><strong>S</strong></span></a> 120 </p> 121 </td> 122<td> 123 <p> 124 <a class="link" href="../interface/function_synopsis.html#element_mapping_type"><span class="bold"><strong>b</strong></span></a> 125 <a class="link" href="../interface/function_synopsis.html#interval_mapping_type"><span class="bold"><strong>p</strong></span></a> 126 <a class="link" href="../interface/function_synopsis.html#interval_map_types"><span class="bold"><strong>M</strong></span></a> 127 </p> 128 </td> 129<td> 130 <p> 131 1 132 </p> 133 </td> 134<td> 135 <p> 136 1 137 </p> 138 </td> 139</tr> 140<tr> 141<td> 142 <p> 143 <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> 144 <span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&)</span></code> 145 </p> 146 </td> 147<td> 148 <p> 149 A 150 </p> 151 </td> 152<td> 153 <p> 154 <a class="link" href="../interface/function_synopsis.html#interval_set_types"><span class="bold"><strong>S</strong></span></a> 155 </p> 156 </td> 157<td> 158 <p> 159 <a class="link" href="../interface/function_synopsis.html#interval_map_types"><span class="bold"><strong>M</strong></span></a> 160 </p> 161 </td> 162<td> 163 <p> 164 1 165 </p> 166 </td> 167<td> 168 <p> 169 1 170 </p> 171 </td> 172</tr> 173<tr> 174<td> 175 <p> 176 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&)</span></code> 177 </p> 178 </td> 179<td> 180 </td> 181<td> 182 <p> 183 1 184 </p> 185 </td> 186<td> 187 <p> 188 1 189 </p> 190 </td> 191<td> 192 <p> 193 1 194 </p> 195 </td> 196<td> 197 <p> 198 1 199 </p> 200 </td> 201</tr> 202</tbody> 203</table></div> 204<p> 205 All <span class="bold"><strong>icl</strong></span> types are <span class="emphasis"><em><span class="bold"><strong>regular 206 types</strong></span></em></span>. They are <span class="emphasis"><em><span class="bold"><strong>default 207 constructible</strong></span></em></span>, <span class="emphasis"><em><span class="bold"><strong>copy 208 constructible</strong></span></em></span> and <span class="emphasis"><em><span class="bold"><strong>assignable</strong></span></em></span>. 209 On icl Sets and Maps a <code class="computeroutput"><span class="identifier">swap</span></code> 210 function is available, that allows for <span class="bold"><strong>constant time</strong></span> 211 swapping of container contents. The <span class="emphasis"><em>regular and swappable part</em></span> 212 of the basic functions and their complexities are described in the tables 213 below. 214 </p> 215<div class="informaltable"><table class="table"> 216<colgroup> 217<col> 218<col> 219<col> 220<col> 221<col> 222<col> 223</colgroup> 224<thead><tr> 225<th> 226 <p> 227 <span class="emphasis"><em><span class="bold"><strong>Regular and swap</strong></span></em></span> 228 </p> 229 </th> 230<th> 231 <p> 232 intervals 233 </p> 234 </th> 235<th> 236 <p> 237 interval<br> sets 238 </p> 239 </th> 240<th> 241 <p> 242 interval<br> maps 243 </p> 244 </th> 245<th> 246 <p> 247 element<br> sets 248 </p> 249 </th> 250<th> 251 <p> 252 element<br> maps 253 </p> 254 </th> 255</tr></thead> 256<tbody> 257<tr> 258<td> 259 <p> 260 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">()</span></code> 261 </p> 262 </td> 263<td> 264 <p> 265 <span class="emphasis"><em>O(1)</em></span> 266 </p> 267 </td> 268<td> 269 <p> 270 <span class="emphasis"><em>O(1)</em></span> 271 </p> 272 </td> 273<td> 274 <p> 275 <span class="emphasis"><em>O(1)</em></span> 276 </p> 277 </td> 278<td> 279 <p> 280 <span class="emphasis"><em>O(1)</em></span> 281 </p> 282 </td> 283<td> 284 <p> 285 <span class="emphasis"><em>O(1)</em></span> 286 </p> 287 </td> 288</tr> 289<tr> 290<td> 291 <p> 292 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&)</span></code> 293 </p> 294 </td> 295<td> 296 <p> 297 <span class="emphasis"><em>O(1)</em></span> 298 </p> 299 </td> 300<td> 301 <p> 302 <span class="emphasis"><em>O(n)</em></span> 303 </p> 304 </td> 305<td> 306 <p> 307 <span class="emphasis"><em>O(n)</em></span> 308 </p> 309 </td> 310<td> 311 <p> 312 <span class="emphasis"><em>O(n)</em></span> 313 </p> 314 </td> 315<td> 316 <p> 317 <span class="emphasis"><em>O(n)</em></span> 318 </p> 319 </td> 320</tr> 321<tr> 322<td> 323 <p> 324 <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> 325 <span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&)</span></code> 326 </p> 327 </td> 328<td> 329 <p> 330 <span class="emphasis"><em>O(1)</em></span> 331 </p> 332 </td> 333<td> 334 <p> 335 <span class="emphasis"><em>O(n)</em></span> 336 </p> 337 </td> 338<td> 339 <p> 340 <span class="emphasis"><em>O(n)</em></span> 341 </p> 342 </td> 343<td> 344 <p> 345 <span class="emphasis"><em>O(n)</em></span> 346 </p> 347 </td> 348<td> 349 <p> 350 <span class="emphasis"><em>O(n)</em></span> 351 </p> 352 </td> 353</tr> 354<tr> 355<td> 356 <p> 357 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&)</span></code> 358 </p> 359 </td> 360<td> 361 </td> 362<td> 363 <p> 364 <span class="emphasis"><em>O(1)</em></span> 365 </p> 366 </td> 367<td> 368 <p> 369 <span class="emphasis"><em>O(1)</em></span> 370 </p> 371 </td> 372<td> 373 <p> 374 <span class="emphasis"><em>O(1)</em></span> 375 </p> 376 </td> 377<td> 378 <p> 379 <span class="emphasis"><em>O(1)</em></span> 380 </p> 381 </td> 382</tr> 383</tbody> 384</table></div> 385<p> 386 where <span class="emphasis"><em>n</em></span> <code class="computeroutput"><span class="special">=</span> <span class="identifier">iterative_size</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>. 387 </p> 388<div class="informaltable"><table class="table"> 389<colgroup> 390<col> 391<col> 392</colgroup> 393<thead><tr> 394<th> 395 <p> 396 <span class="emphasis"><em><span class="bold"><strong>Construct, copy, destruct</strong></span></em></span> 397 </p> 398 </th> 399<th> 400 <p> 401 Description 402 </p> 403 </th> 404</tr></thead> 405<tbody> 406<tr> 407<td> 408 <p> 409 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">()</span></code> 410 </p> 411 </td> 412<td> 413 <p> 414 Object of type T is default constructed. 415 </p> 416 </td> 417</tr> 418<tr> 419<td> 420 <p> 421 <code class="computeroutput"><span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> 422 </p> 423 </td> 424<td> 425 <p> 426 Object of type T is copy constructed from object <code class="computeroutput"><span class="identifier">src</span></code>. 427 </p> 428 </td> 429</tr> 430<tr> 431<td> 432 <p> 433 <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> 434 <span class="identifier">T</span><span class="special">::</span><span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> 435 </p> 436 </td> 437<td> 438 <p> 439 Assigns the contents of src to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> object. Returns a reference 440 to the assigned object. 441 </p> 442 </td> 443</tr> 444<tr> 445<td> 446 <p> 447 <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> 448 </p> 449 </td> 450<td> 451 <p> 452 Swaps the content containers <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> and <code class="computeroutput"><span class="identifier">src</span></code> 453 in constant time. 454 </p> 455 </td> 456</tr> 457</tbody> 458</table></div> 459<p> 460 In addition we have overloads of constructors and assignment operators for 461 icl container types. 462</p> 463<pre class="programlisting"><span class="comment">// overload tables for constructors</span> 464<span class="identifier">T</span><span class="special">::</span><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span> 465 466<span class="identifier">element</span> <span class="identifier">containers</span><span class="special">:</span> <span class="identifier">interval</span> <span class="identifier">containers</span><span class="special">:</span> 467<span class="identifier">T</span> <span class="special">\</span> <span class="identifier">P</span> <span class="special">|</span> <span class="identifier">e</span> <span class="identifier">b</span> <span class="identifier">s</span> <span class="identifier">m</span> <span class="identifier">T</span> <span class="special">\</span> <span class="identifier">P</span> <span class="special">|</span> <span class="identifier">e</span> <span class="identifier">i</span> <span class="identifier">b</span> <span class="identifier">p</span> <span class="identifier">S</span> <span class="identifier">M</span> 468<span class="special">------+--------</span> <span class="special">------+------------</span> 469<span class="identifier">s</span> <span class="special">|</span> <span class="identifier">s</span> <span class="identifier">s</span> <span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">S</span> <span class="identifier">S</span> 470<span class="identifier">m</span> <span class="special">|</span> <span class="identifier">m</span> <span class="identifier">m</span> <span class="identifier">M</span> <span class="special">|</span> <span class="identifier">M</span> <span class="identifier">M</span> <span class="identifier">M</span> 471</pre> 472<p> 473 </p> 474<p> 475 For an object <code class="computeroutput"><span class="identifier">dst</span></code> of type 476 <code class="computeroutput"><span class="identifier">T</span></code> and an argument <code class="computeroutput"><span class="identifier">src</span></code> of type <code class="computeroutput"><span class="identifier">P</span></code> 477 let 478</p> 479<pre class="programlisting"><span class="identifier">n</span> <span class="special">=</span> <span class="identifier">iterative_size</span><span class="special">(</span><span class="identifier">dst</span><span class="special">);</span> 480<span class="identifier">m</span> <span class="special">=</span> <span class="identifier">iterative_size</span><span class="special">(</span><span class="identifier">src</span><span class="special">);</span> 481</pre> 482<p> 483 in the following tables. 484 </p> 485<div class="table"> 486<a name="boost_icl.function_reference.construct__copy__destruct.t0"></a><p class="title"><b>Table 1.17. Time Complexity for overloaded constructors on element containers</b></p> 487<div class="table-contents"><table class="table" summary="Time Complexity for overloaded constructors on element containers"> 488<colgroup> 489<col> 490<col> 491<col> 492<col> 493<col> 494</colgroup> 495<thead><tr> 496<th> 497 <p> 498 <code class="computeroutput"><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> 499 </p> 500 </th> 501<th> 502 <p> 503 domain<br> type 504 </p> 505 </th> 506<th> 507 <p> 508 domain<br> mapping<br> type 509 </p> 510 </th> 511<th> 512 <p> 513 interval<br> sets 514 </p> 515 </th> 516<th> 517 <p> 518 interval<br> maps 519 </p> 520 </th> 521</tr></thead> 522<tbody> 523<tr> 524<td> 525 <p> 526 <a href="http://www.cplusplus.com/reference/stl/set/" target="_top"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span></code> </a> 527 </p> 528 </td> 529<td> 530 <p> 531 <span class="emphasis"><em>O(log n)</em></span> 532 </p> 533 </td> 534<td> 535 </td> 536<td> 537 <p> 538 <span class="emphasis"><em>O(m)</em></span> 539 </p> 540 </td> 541<td> 542 </td> 543</tr> 544<tr> 545<td> 546 <p> 547 <code class="computeroutput"><a class="link" href="../../boost/icl/map.html" title="Class template map">icl::map</a></code> 548 </p> 549 </td> 550<td> 551 </td> 552<td> 553 <p> 554 <span class="emphasis"><em>O(log n)</em></span> 555 </p> 556 </td> 557<td> 558 </td> 559<td> 560 <p> 561 <span class="emphasis"><em>O(m)</em></span> 562 </p> 563 </td> 564</tr> 565</tbody> 566</table></div> 567</div> 568<br class="table-break"><p> 569 Time complexity characteristics of inplace insertion for interval containers 570 is given by this table. 571 </p> 572<div class="table"> 573<a name="boost_icl.function_reference.construct__copy__destruct.t1"></a><p class="title"><b>Table 1.18. Time Complexity for overloaded constructors on interval containers</b></p> 574<div class="table-contents"><table class="table" summary="Time Complexity for overloaded constructors on interval containers"> 575<colgroup> 576<col> 577<col> 578<col> 579<col> 580<col> 581<col> 582<col> 583</colgroup> 584<thead><tr> 585<th> 586 <p> 587 <code class="computeroutput"><span class="identifier">T</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> 588 </p> 589 </th> 590<th> 591 <p> 592 domain<br> type 593 </p> 594 </th> 595<th> 596 <p> 597 interval<br> type 598 </p> 599 </th> 600<th> 601 <p> 602 domain<br> mapping<br> type 603 </p> 604 </th> 605<th> 606 <p> 607 interval<br> mapping<br> type 608 </p> 609 </th> 610<th> 611 <p> 612 interval<br> sets 613 </p> 614 </th> 615<th> 616 <p> 617 interval<br> maps 618 </p> 619 </th> 620</tr></thead> 621<tbody> 622<tr> 623<td> 624 <p> 625 interval_sets 626 </p> 627 </td> 628<td> 629 <p> 630 <span class="emphasis"><em>O(1)</em></span> 631 </p> 632 </td> 633<td> 634 <p> 635 <span class="emphasis"><em>O(1)</em></span> 636 </p> 637 </td> 638<td> 639 </td> 640<td> 641 </td> 642<td> 643 <p> 644 <span class="emphasis"><em>O(m)</em></span> 645 </p> 646 </td> 647<td> 648 </td> 649</tr> 650<tr> 651<td> 652 <p> 653 interval_maps 654 </p> 655 </td> 656<td> 657 </td> 658<td> 659 </td> 660<td> 661 <p> 662 <span class="emphasis"><em>O(1)</em></span> 663 </p> 664 </td> 665<td> 666 <p> 667 <span class="emphasis"><em>O(1)</em></span> 668 </p> 669 </td> 670<td> 671 </td> 672<td> 673 <p> 674 <span class="emphasis"><em>O(m)</em></span> 675 </p> 676 </td> 677</tr> 678</tbody> 679</table></div> 680</div> 681<br class="table-break"><p> 682</p> 683<pre class="programlisting"><span class="comment">// overload tables for assignment</span> 684<span class="identifier">T</span><span class="special">&</span> <span class="keyword">operator</span> <span class="special">=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span> 685 686<span class="identifier">interval</span> <span class="identifier">containers</span><span class="special">:</span> 687<span class="identifier">T</span> <span class="special">\</span> <span class="identifier">P</span> <span class="special">|</span> <span class="identifier">S</span> <span class="identifier">M</span> 688<span class="special">------+----</span> 689<span class="identifier">S</span> <span class="special">|</span> <span class="identifier">S</span> 690<span class="identifier">M</span> <span class="special">|</span> <span class="identifier">M</span> 691</pre> 692<p> 693 </p> 694<p> 695 The assignment <code class="computeroutput"><span class="identifier">T</span><span class="special">&</span> 696 <span class="keyword">operator</span> <span class="special">=</span> 697 <span class="special">(</span><span class="keyword">const</span> <span class="identifier">P</span><span class="special">&</span> <span class="identifier">src</span><span class="special">)</span></code> is 698 overloaded within interval containers. For all type combinations we have 699 <span class="emphasis"><em><span class="bold"><strong>linear time complexity</strong></span></em></span> 700 in the maximum of the <code class="computeroutput"><span class="identifier">iterative_size</span></code> 701 of <code class="computeroutput"><span class="identifier">dst</span></code> and <code class="computeroutput"><span class="identifier">src</span></code>. 702 </p> 703<p> 704 <span class="emphasis"><em><span class="bold"><strong>Back to section . . .</strong></span></em></span> 705 </p> 706<div class="informaltable"><table class="table"> 707<colgroup><col></colgroup> 708<thead><tr></tr></thead> 709<tbody> 710<tr><td> 711 <p> 712 <a class="link" href="../interface/function_synopsis.html#function_synopsis_table"><span class="emphasis"><em><span class="bold"><strong>Function 713 Synopsis</strong></span></em></span></a> 714 </p> 715 </td></tr> 716<tr><td> 717 <p> 718 <a class="link" href="../interface.html" title="Interface"><span class="emphasis"><em><span class="bold"><strong>Interface</strong></span></em></span></a> 719 </p> 720 </td></tr> 721</tbody> 722</table></div> 723</div> 724<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 725<td align="left"></td> 726<td align="right"><div class="copyright-footer">Copyright © 2007-2010 Joachim 727 Faulhaber<br>Copyright © 1999-2006 Cortex Software 728 GmbH<p> 729 Distributed under the Boost Software License, Version 1.0. (See accompanying 730 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 731 </p> 732</div></td> 733</tr></table> 734<hr> 735<div class="spirit-nav"> 736<a accesskey="p" href="key_types.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function_reference.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="containedness.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 737</div> 738</body> 739</html> 740