相关疑难解决方法(0)

T &&(双&符号)在C++ 11中意味着什么?

我一直在研究C++ 11的一些新功能,我注意到的是在声明变量时使用的双符号,例如T&& var.

首先,这只野兽叫什么?我希望谷歌允许我们搜索这样的标点符号.

究竟是什么意思?

乍一看,它似乎是一个双重参考(如C风格的双指针T** var),但我很难想到一个用例.

c++ c++-faq rvalue-reference perfect-forwarding c++11

747
推荐指数
4
解决办法
18万
查看次数

连接两个向量的最佳方法是什么?

我正在使用多线程并想要合并结果.例如:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
Run Code Online (Sandbox Code Playgroud)

我希望AB按顺序拥有A的内容和B的内容.做这样的事情最有效的方法是什么?

c++ vector

173
推荐指数
5
解决办法
18万
查看次数

std :: forward如何工作?

可能重复:
使用forward的优点

我知道它的作用以及何时使用它但我仍然无法理解其工作原理.请尽可能详细,并解释std::forward如果允许使用模板参数推断,何时不正确.

我的一部分困惑是:"如果它有一个名字,它就是一个左值" - 如果是这样的话,为什么std::forward当我通过thing&& xvs 时表现不同thing& x

c++ c++11

106
推荐指数
2
解决办法
7万
查看次数

c ++ 11的序列拉链功能?

使用新的基于范围的for循环,我们可以编写类似的代码

for(auto x: Y) {}
Run Code Online (Sandbox Code Playgroud)

哪个IMO是一个巨大的进步(例如)

for(std::vector<int>::iterator x=Y.begin(); x!=Y.end(); ++x) {}
Run Code Online (Sandbox Code Playgroud)

可以用它来循环两个同时循环,比如Pythons zip函数吗?对于那些不熟悉Python的人,代码如下:

Y1 = [1,2,3]
Y2 = [4,5,6,7]
for x1,x2 in zip(Y1,Y2):
    print x1,x2
Run Code Online (Sandbox Code Playgroud)

作为输出 (1,4) (2,5) (3,6)

c++ sequences c++11

87
推荐指数
11
解决办法
4万
查看次数

如何使用BOOST_FOREACH同时迭代两个向量?

我想用BOOST FOREACH复制以下内容

std::vector<int>::const_iterator i1;
std::vector<int>::const_iterator i2;
for( i1 = v1.begin(), i2 = v2.begin();
     i1 < v1.end() && i2 < v2.end();
     ++i1, ++i2 )
{
     doSomething( *i1, *i2 );
}
Run Code Online (Sandbox Code Playgroud)

c++ boost iterator boost-foreach

33
推荐指数
3
解决办法
2万
查看次数

从矢量中选择特定元素

我有一个向量v1,和一个v2相同大小的布尔向量.我想从v1所有值中删除,以便并行元素v2false:

vector<int> v3; // assume v1 is vector<int>
for (size_t i=0; i<v1.size(); i++)
    if (v2[i])
        v3.push_back(v1[i]);
v1=v3;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

  • 在C++ 03中
  • 在C++ 11中

c++ stdvector c++11

20
推荐指数
4
解决办法
8567
查看次数

具有多个容器的循环范围

假设我有2个(或更多)容器我想同时迭代 - 例如,计算两个向量的点积:

std::vector<double> vector1;
std::vector<double> vector2;    // identical size to vector1
Run Code Online (Sandbox Code Playgroud)

同时在两个(或所有)容器上指定range-for循环的首选C++ 11方法是什么?是否涉及选择一个容器/迭代器来for ( auto i : c )在范围for for循环中编写short-hand(ie ),而所有其他容器/迭代器必须长期处理?是否有任何理由将来的语法无法扩展到支持两个/所有容器的短手,如下所示...这看起来真的可读:

double dotProduct( 0.0 );
for ( auto const & value1 : vector1, auto const & value2 : vector2 )  // illegal!
{
    dotProduct += value1*value2;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

14
推荐指数
1
解决办法
6380
查看次数

boost::combine,基于范围的和结构化绑定

有没有一种方法可以boost::combine使用结构化绑定和基于范围的 for(这样结构绑定中的标识符实际上指向容器的元素,而不是内部使用的嵌套元组boost::combine)?以下(实时示例)无法编译:

#include <boost/range/combine.hpp>
#include <iostream>

int main()
{
    std::vector<int> a{1,2,3};
    std::vector<int> b{2,3,4};

    for (auto [f, s] : boost::combine(a, b))
    {
        std::cout << f << ' ' << s << std::endl   
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ boost for-loop c++17

13
推荐指数
1
解决办法
2025
查看次数

迭代多个seq.C++中的容器11

我需要一个针对以下情况的建议 - 我几个小时都无法弄明白:如何通过多个seq.容器大小相同(这里:两个向量)的简单方法?

int main() {
  int size = 3;
  std::vector<int> v1{ 1, 2, 3 }, v2{ 6, 4, 2 };

  // old-fashioned - ok
  for (int i = 0; i < size; i++) {
    std::cout << v1[i] << " " << v2[i] << std::endl;
  }

  // would like to do the same as above with auto range-for loop
  // something like this - which would be fine for ONE vector.
  // But this does not work. Do I need …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

12
推荐指数
2
解决办法
4088
查看次数

同时遍历2个向量的最佳和最有效的方法是什么?

我对新的现代C++标准感兴趣.因为我已经用适用的新的基于范围的for循环替换了所有旧的for循环.

然而,我最近遇到了一些似乎不起作用的东西.虽然我认为这将是对已经完成的工作的简单扩展.我只是想知道我是否遗漏了什么?

我的问题:我有2个大小相同的信息向量,它们存储来自我们的一个3d派对组件的HTTP头.我需要循环这两个以将标头添加到我的http客户端.

目前我的代码类似于以下内容:

auto iter1 = vec1.begin();
auto iter2 = vec2.begin();
while (iter1 != vec1.end())
{
    http_client.add_header(*iter1, *iter2);

    ++iter1;
    ++iter2;
}
Run Code Online (Sandbox Code Playgroud)

我可能会有什么:

for (auto header, value : vec1, vec2)
{
    http_client.add_header(header, value);
}
Run Code Online (Sandbox Code Playgroud)

我原以为这会明确地声明我的两个向量必须是相同的长度,因此检查可以自动完成.而且这可以以最有效的方式实现(毕竟我确信我当前的代码中有许多隐藏的漏洞).不仅如此,我认为多范围的循环声明更容易理解.

有没有这样的东西可用或者我完全忽略了这一点?

c++ for-loop c++11 c++14

5
推荐指数
0
解决办法
127
查看次数

c ++ 11用于多个项目的容器循环

我想知道在c ++ 11语法中是否有可能为多个项使用基于for for循环的新容器,例如:

std::vector<double> x;
std::vector<double> y;

for (double& xp, yp : x, y)
{
     std::cout << xp << yp << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我无法找到有关将此循环用于多个容器的任何信息.我将非常感谢所有的帮助.

经典for循环中的示例效果:

std::vector<double>::iterator itX = m_x.begin();
std::vector<double>::iterator itY = m_y.begin();

for (uint32_t i = 0; i < m_x.size(); i++, itX++, itY++)
{
    // operations on the m_x and m_y vectors
}
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++11

3
推荐指数
1
解决办法
1378
查看次数

有没有办法迭代两个容器而不使用两个for循环

有没有办法迭代两个容器(一个跟随另一个),而不使用两个for循环.

我的意图是做这样的事情

vector<int> a{ 1,2,3 };
vector<int> b{ 4,5,6 };

auto it = a.begin();
auto end = b.end();

for (; it != end; ++it)
{
    if (it == a.end())
    {
        it = b.begin();
    }
    // do something with *it
}
Run Code Online (Sandbox Code Playgroud)

打印

1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

(当然它不起作用.解释在这个答案中)

我不想写两个for循环并复制循环内的代码.有没有办法迭代a后跟b一个for循环?

我能想到的唯一的事情或者是拷贝/第二容器移动到第一或合并创建一个新的矢量ab,然后遍历它.我也不想这样做,因为这意味着昂贵的复制操作.

c++ c++11 c++14 c++17

3
推荐指数
1
解决办法
215
查看次数

在基于范围的 for 循环中使用结构化绑定声明

我正在尝试将两个std::map容器(例如std::map<int, int> foo, bar)合并到第三个容器std::map(例如std::map<int, int> foobar)中。

我知道我可以使用迭代器来实现这一点,如下所示:

    std::map<int, int>::iterator itr1 = foo.begin();
    std::map<int, int>::iterator itr2 = bar.begin();

    for (; itr1 != foo.end() && itr2 != bar.end(); ++itr1, ++itr2) 
    {
      foobar[itr1->first] += itr1->second;
      foobar[itr2->first] += itr2->second;
    }
Run Code Online (Sandbox Code Playgroud)

但是我如何使用基于范围的 for 循环(也许与结构化绑定声明结合使用)来实现相同的目的?

或者有没有更好的方法来组合这两个关联容器?

编辑:这个问题的预期答案应该采用两个容器(std::map此处)并将它们组合成一个联合/联合映射,其中键来自各自的关联容器,并且添加重复键的值。

示例: 如果给定std::map容器foobar是:

  std::map<int, int> foo = {{1, 10}, {2, 20}, {3, 30}};
  std::map<int, int> bar = {{3, 50}, {4, 60}};
Run Code Online (Sandbox Code Playgroud)

那么“foobar”应该是:

  std::map<int, int> …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++17 structured-bindings

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