相关疑难解决方法(0)

使用C++ 11基于范围的正确方法是什么?

使用C++ 11基于范围的正确方法是for什么?

应该使用什么语法?for (auto elem : container),for (auto& elem : container)或者for (const auto& elem : container)?还是其他一些?

c++ foreach c++11

182
推荐指数
3
解决办法
7万
查看次数

为什么vector <bool>不是STL容器?

Scott Meyers的书第18项有效STL:50改进您对标准模板库的使用的具体方法说避免vector <bool>因为它不是STL容器而且它实际上并不存在bool.

以下代码:

vector <bool> v; 
bool *pb =&v[0];
Run Code Online (Sandbox Code Playgroud)

不会编译,违反STL容器的要求.

错误:

cannot convert 'std::vector<bool>::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization
Run Code Online (Sandbox Code Playgroud)

bool返回类型应该是T&,但为什么它是特殊情况vector<T>::operator []

什么是T&真正组成的呢?

该项目进一步说:

deque<bool> v; // is a STL container and it really contains bools
Run Code Online (Sandbox Code Playgroud)

这可以用作替代品vector<bool>吗?

有人可以解释一下吗?

c++ containers stl vector bitvector

85
推荐指数
5
解决办法
4万
查看次数

auto是一个基于范围的可选关键字for循环吗?

我记得曾经有人告诉我,

"不需要基于auto内部范围的for循环.如果我们要删除它,那么语言就 不会含糊不清."

这是真实的陈述吗?
以下代码是否有效的C++语法?

for (elem : range){...}  
Run Code Online (Sandbox Code Playgroud)

我原以为这已经是有效的语法,但是当我去编译时
clang++ --std=c++1z,我出现了以下错误:

range-based for loop requires type for loop variable
 for (elem: range){
Run Code Online (Sandbox Code Playgroud)

编译器仍然将其识别为基于范围的for循环,那么为什么它也不能导出类​​型呢?

c++ for-loop auto c++17

9
推荐指数
2
解决办法
780
查看次数

如何在 QJsonArray 中使用基于 C++11 的范围

使用旧式循环,我可以深入研究 aQJsonArray并在下面的示例中为每个数组项添加元素“foo”和现有元素“bar”的内容。我如何使用基于 C++11 的范围来做到这一点?

// QJsonArray oldArray contains an array of which one element is "bar"
QJsonArray newArray;
int i, b = oldArray.count();
for (i=0; i<n; ++i) {
    QJsonObject element = oldArray.at(i).toObject();
    element["foo"] = element["bar"];
    newArray.append(element);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法(无可否认是反复试验):

汽车&

for (auto& element : oldArray) {
    element["foo"] = element["bar];
    newArray.append(element);
}
Run Code Online (Sandbox Code Playgroud)

我收到错误

对类型“QJsonValueRef”的非常量左值引用无法绑定到“QJsonValueRef”类型的临时变量

常量自动&

for (const auto& element : oldArray) {
...
Run Code Online (Sandbox Code Playgroud)

我收到警告

循环变量“元素”始终是副本,因为“QJsonArray”类型的范围不返回引用

常量自动

for (const auto element : oldArray) {
    element["foo"] = element["bar];
    ...
Run Code Online (Sandbox Code Playgroud)

我收到错误

'const QJsonValueRef' …

qt for-loop c++11

9
推荐指数
1
解决办法
3003
查看次数

标签 统计

c++ ×3

c++11 ×2

for-loop ×2

auto ×1

bitvector ×1

c++17 ×1

containers ×1

foreach ×1

qt ×1

stl ×1

vector ×1