Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2013-04-27 10:46:42.
Revizia anterioară   Revizia următoare  

C++ compiler upgrades on infoarena

pauldb
Paul-Dan Baltescu
27 aprilie 2013

We now have the --std=c++0x compiler option enabled on infoarena. We also updated our g++ compiler to version 4.8.

What does it mean?

C++ users can now use a bunch of cool features, some of which are described below briefly. Keep in mind that these features are not yet available at OJI, ONI, etc., so don't use them at any of these competitions unless they are allowed explicitly by the regulations.

1. auto

You can now let the compiler guess the type of some variable:

auto a = 45;
auto b = 4.5;
auto c = vector<int>(10);

auto can also be used with const auto or const auto&. It works in the same way other types would work. In most cases, auto cannot be used in function signatures.

2. range-based for loops

In C++11, you can iterate over each element in a list with less code:

int array[5] = {1, 2, 3, 4, 5};
for (int x: array) {
  cout << x << endl;
}

If you want to modify the elements in the list, you need to get a reference to the current element like this:

double array[5] = {1.5, 2.7, 3.9};
for (auto &x: array) {
  x *= 2;
}

Note: This code compiles without using &, but the original array is not modified unless a reference is used.

3. initializer lists

Simple one-line initializations with lists of constant values:

vector<pair<int, int>> dirs = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};

Note that since C++11 you no longer need to introduce a space between closing right angle brackets (>>).

4. unordered_set, unordered_map

These are hash-based implementations of the well known set and map containers; the average time complexity on most operations is O(1). (These containers were previously available on infoarena under tr1, but only a small fraction of users were actually using them.)

unordered_map<string, int> age = {
  {"john", 18}, {"mary", 21}, {"anna", 19}
};
Categorii: Features