How to Remove Elements from a Sequence Container in C++--Jonathan Boccara

Using the std to remove.

How to Remove Elements from a Sequence Container in C++

by Jonathan Boccara

From the article:

As part of the STL Learning Resource, we’re tackling today the STL algorithms that remove elements from a collection.

Removing an element from a C++ collection can’t be that complicated, can it?

Well, how can I put it… It has a rich complexity, let’s say.

Ok, maybe it’s a little complicated.

We will cover this topic in a series of four articles:

  • How to Remove Elements from a Sequence Container (vector, string, deque, list)
  • How to Remove Pointers from a Vector in C++ (co-written with Gaurav Sehgal)
  • How to Remove Elements from an Associative Container (maps and sets)
  • How to Remove Duplicates from an Associative Container

C++ Links #2--Bartlomiej Filipek

New links to check out!

C++ Links #2

by Bartlomiej Filipek

From the article:

Welcome to new C++ Links - most important and useful articles, podcasts and videos that happened between 8th and 14th of September. Today you will find a link to a post about the C++ quality of life features, a video with an explanation of the difference between const and constexpr, an article that describes some of SFINAE problems and many others.

Modern C++ Features – Quality-of-Life Features--Arne Mertz

Some to help, some to enable.

Modern C++ Features – Quality-of-Life Features

by Arne Mertz

From the article:

With the new C++ standards, we got a lot of features that feel like “quality-of-life” features. They make things easier for the programmer but do not add functionality that wasn’t already there. Except, some of those features do add functionality we couldn’t implement manually.

Some of those quality-of-life features are really exactly that. The standard often describes them as being equivalent to some alternative code we can actually type. Others are mostly quality-of-life, but there are edge cases where we can not get the effect by hand, or the feature is slightly superior to the manual implementation.

I will concentrate on core language features here, since most library features are implementable using regular C++. Only a few library features use compiler intrinsics...

CppCon 2017: Class Template Argument Deduction: A New Abstraction--Zhihao Yuan

Have you registered for CppCon 2018 in September? Late registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2017 for you to enjoy. Here is today’s feature:

Class Template Argument Deduction: A New Abstraction

by Zhihao Yuan

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

C++17 is often quoted as “just a better C++14”, suggesting that nothing is new, nothing is changing the way we program. This talk presents class template argument deduction as a counterexample, a hidden gem in the new standard.

Saves typing? A replacement for the `make` functions? If that’s your frame, then you should come to this talk. The true power of class template argument deduction is underestimated. It’s a new point of abstraction but requiring creativity, insights, and understanding about the language details to manage.

This talk will start by introducing all matters about this feature to build up sufficient background knowledge, followed by teaching how to write deduction guides by examples, and finally explain how to build abstractions using the whole feature in a top-down approach, with patterns categorized.

CopperSpice: Constexpr Static Const

New video on the CopperSpice YouTube Channel:

Constexpr Static Const

by Barbara Geller and Ansel Sermersheim

About the video:

This presentation covers constexpr and how it differs from const. We also discuss what constexpr means in practice versus what is actually required by the standard, a subject which is often misunderstood. The topic of constexpr vs preprocessor macros is also covered with suggestions for best practices.

Please take a look and remember to subscribe!

Microsoft Cognitive Services C++ SDK--Sebastiano Galazzo

Are you wondering how to use the Microsoft Cognitive Services with C++?

Microsoft Cognitive Services C++ SDK

by Sebastiano Galazzo

Introduction:

The project is a wrapper to use Microsoft Cognitive Services in standard C++ as is currently not supported.

The project provides full support to Computer Vision API. A wrapper to gphoto2 will provide the full control digital cameras (DSLR), getting the raw shot and making manipulations with Computer Vision API.

Available camera-ai, a working commandline example to take a picture from the camera conneced by USB and analyze by Cognitive Services.

A lot of people have a better C++ than mine, who wants to contribute is welcomed!

What’s New in ReSharper C++ 2018.2

While ReSharper C++ 2018.1 introduced two major new features, debug step filters and includes analyzer, ReSharper C++ 2018.2 is focused on improving its understanding of the C++ language. C++17 and C++20 got some special attention. However, the biggest highlight is the long-awaited support for C++/CLI.


What’s New in ReSharper C++ 2018.2

by Igor Akhmetov

From the article:

This release introduced:

  • Initial C++/CLI support
  • C++17 features: class template argument deduction, fold expressions, auto non-type template parameters, pack expansions in using declarations, Using declarations with multiple declarators, guaranteed copy elision, and more
  • C++20 features: coroutines, designated initialization, and some others
  • Integrated spell checking with ReSpeller
  • Formatting inspections

 

 

Quick Q: C++11 auto: what if it gets a constant reference?

Quick A: auto never deduces a reference.

Recently on SO:

C++11 auto: what if it gets a constant reference?

Read this article: Appearing and Disappearing consts in C++

Type deduction for auto variables in C++0x is essentially the same as for template parameters. (As far as I know, the only difference between the two is that the type of auto variables may be deduced from initializer lists, while the types of template parameters may not be.) Each of the following declarations therefore declare variables of type int (never const int):

auto a1 = i;
auto a2 = ci;
auto a3 = *pci;
auto a4 = pcs->i;

During type deduction for template parameters and auto variables, only top-level consts are removed. Given a function template taking a pointer or reference parameter, the constness of whatever is pointed or referred to is retained:

template<typename T>
void f(T& p);

int i;
const int ci = 0;
const int *pci = &i;

f(i);               // as before, calls f<int>, i.e., T is int
f(ci);              // now calls f<const int>, i.e., T is const int
f(*pci);            // also calls f<const int>, i.e., T is const int

This behavior is old news, applying as it does to both C++98 and C++03. The corresponding behavior for auto variables is, of course, new to C++0x:

auto& a1 = i;       // a1 is of type int&
auto& a2 = ci;      // a2 is of type const int&
auto& a3 = *pci;    // a3 is also of type const int&
auto& a4 = pcs->i;  // a4 is of type const int&, too

Since you can retain the cv-qualifier if the type is a reference or pointer, you can do:

auto& my_foo2 = GetFoo();

Instead of having to specify it as const (same goes for volatile).

Edit: As for why auto deduces the return type of GetFoo() as a value instead of a reference (which was your main question, sorry), consider this:

const Foo my_foo = GetFoo();

The above will create a copy, since my_foo is a value. If auto were to return an lvalue reference, the above wouldn't be possible.