小编ste*_*anv的帖子

首选标准用途:基于范围或std :: for_each

C++ 11中,所有元素都有两个循环(基于for和for_each的范围).是否有理由偏爱另一个或者是否存在更适合的情况?

for (auto& elem: container) {
  // do something with elem
}

std::for_each(container.begin(), container.end(),
              [](Elem& elem) {
                // do something with elem
              });
Run Code Online (Sandbox Code Playgroud)

我的想法是第一个更简单,类似于其他语言中基于范围的循环,而第二个也适用于不完整容器的序列,第二个更类似于其他std算法.

c++ coding-style c++11

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

在Python中,是否有一种优雅的方式以自定义格式打印列表而无需显式循环?

我知道你能做到

print str(myList)
Run Code Online (Sandbox Code Playgroud)

要得到

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

你可以做到

i = 0
for entry in myList:
  print str(i) + ":", entry
  i += 1
Run Code Online (Sandbox Code Playgroud)

要得到

0: 1  
1: 2  
2: 3    
Run Code Online (Sandbox Code Playgroud)

但有没有类似于第一个得到类似于最后一个结果的方法?

由于我对Python的了解有限(以及文档中的一些帮助),我最好的是:

print '\n'.join([str(n) + ": " + str(entry) for (n, entry) in zip(range(0,len(myList)), myList)])
Run Code Online (Sandbox Code Playgroud)

它不是那么冗长,但至少我在一个(复合)语句中得到一个自定义字符串.你能做得更好吗?

python list

43
推荐指数
5
解决办法
12万
查看次数

您可以将 nullptr 与其他指针进行比较以进行排序吗?它总是更小吗?

这个问题基于我发现监控可能内存泄漏的代码,因此它包含一些您可能不希望在常规程序中看到的代码,例如排序指针。

但是,我看到设置了一个指针nullptr,然后将该指针与最大地址进行比较。是否由 C++ 标准保证nullptr总是小于其他指针operator<

c++ pointer-arithmetic comparison-operators nullptr

26
推荐指数
3
解决办法
1719
查看次数

有人使用命名的布尔运算符吗?

或者我们都坚持我们的教学"&&,||,!" 办法?

我们为什么要使用其中一个的任何想法?

我只是想知道,因为有几个答案说明代码应该尽可能自然,但是我没有看到很多带有"and,or,not"的代码,而这更自然.

c++ boolean

13
推荐指数
5
解决办法
2268
查看次数

什么是这个C++ 14结构被称为链接lambdas?

这是关于这一点的后续问题:C++ 14中的Lambda-Over-Lambda,答案解释了代码.

它是关于lambda创建另一个lambda,在调用时,调用传递的lambda并将返回值传递给原始lambda,从而返回第二个lambda的新实例.

该示例显示了lambdas可以链接的方式.

复制原始问题:

#include <cstdio>

auto terminal = [](auto term)            // <---------+  
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >---------+
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

是否已经有了这个结构的名称,如果不是,它应该被称为什么?它是否类似于其他语言的结构?

备注:我对它是否真的有用并不感兴趣.

c++ lambda c++14

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

复制Elision误解

#include <iostream>

struct A
{
    A() { std::cout << "Def Constr\n"; }

    A(const A&) { std::cout << "Copy Constr\n"; }
};

A func1() 
{
    return A{};
}

void func2(A a) {}

int main()
{
    func2(func1());
}
Run Code Online (Sandbox Code Playgroud)

编译完成后

g ++ Copy.cpp -std = c ++ 11 -fno-elide-constructors

输出是:

Def Constr

复制Constr

复制Constr

我的问题是:为什么2复制Constr?我以为只需要1份复印件.

我可能猜测func1()会抛出一个临时对象,并且需要将此临时对象复制到另一个内存区域,并且必须再次从该区域为func2()参数创建一个副本,但它对我来说是模糊的.

你能详细解释一下吗?

c++ copy-elision c++11

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

在容器元素上应用函数需要更好的名称

我有一个容器类(包含一个多索引容器),我有一个公共的"foreach"成员函数,因此用户可以传递一个仿函数来应用所有元素.
在实现时,我遇到了一个案例,即仿函数只应该应用于容器中某个范围的某些元素,所以我重载了foreach,以传递一些有效的范围.
现在,在某些情况下,值得在某个条件下停止,所以实际上,我让foreach根据函数的返回值停止.

我对系统如何工作感到满意,但我有一个问题:
在一个范围内,如何调用停止条件的"foreach"?
任何人都知道一个通​​用,清晰和简洁的名称?

c++ refactoring

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

如何实现一个大小有限的类似stl的容器?

在重构时,我想更改一个数组,其中条目被添加到std :: vector,但是为了兼容性(持久性,降级,......),它仍然需要有一个上限.
有一个类似stl的容器的最佳方式(优雅,类似stl,有限的额外代码)是多少,所以你知道插入一个条目失败了吗?

编辑:
澄清:我想要一个类似stl的容器,它开始为空,你可以填充条目并可能删除条目并迭代填充的条目,但这不允许输入超过例如50个条目,所以几乎像一个顺序的对手,但有一个上限.

c++ refactoring stl

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

C++ - 返回C++ 11 std :: array

我有一些类似的代码

#define SIZE 10
Class User
{
public:
    std::array<Account, SIZE> getListAccount()
    {
         return listAccount;
    }
private:
    std::array<Account, SIZE> listAccount
}

Class Account
{
public:
    void setUserName(std::string newUSN)
    {
        userName=newUSN;
    }
private:
    string userName;
    string password;
}


int main()
{
     User xxx(.......);
     xxx.getListAccount()[1].setUserName("abc");    // It doesn't effect
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么setUserName()main中的函数调用不会更改我的xxx用户名?

顺便说说:

  • 我正在使用,std::array因为我想将数据保存在二进制文件中
  • 在我的实际代码中,我用户char [],而不是字符串

c++ arrays reference c++11

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

为什么在使用operator << via template时需要重载?

正如在这个问题中,我正在尝试使用SBRM/RAII通过类进行流式传输,所以

SBRM(x) << "test";
Run Code Online (Sandbox Code Playgroud)

可以在析构函数中做一些额外的工作,但我的模板知识似乎有限.

我所拥有的(为清晰起见更简单)是:

#include <iostream>
#include <sstream>

class SBRM
{
public:
  SBRM(int j) : i(j) {}
  ~SBRM() { std::cout << "SBRM(" << i << "): " << oss.str() << std::endl; }

  template<typename T> SBRM& operator<<(T& in) { oss << in; return *this; }
  // SBRM& operator<<(const long long& in) { oss << std::hex << "0x" << in; return *this; }
  SBRM& operator<<(const double& in) { oss << in; return *this; }
  SBRM& operator<<(const void* in) …
Run Code Online (Sandbox Code Playgroud)

c++ templates raii

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

可以boost :: bind与引用一起使用而不复制吗?

以下代码显示使用boost :: bind时复制通过引用传递的参数.有没有办法防止复制而不诉诸指针(我目前用作解决方法)?(用gcc 4.4.3测试)

#include <iostream>
#include <boost/function.hpp>
#include <boost/bind.hpp>

void function1(int& x)
{
  std::cout << "function1 &x: " << &x << std::endl;
}

int main()
{
  int y = 0;
  std::cout << "main &y: " << &y << std::endl;

  boost::function<void()> f = boost::bind(function1, y);
  f();
}
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

const char *向量的新值未获取push_back()

我有一个向量cons char *。这实际上是一个时间戳。每次,我都获取最后一个值,将其转换为整数,然后增加40。然后将其作为const char *返回到vector。我的问题是,新值未获取push_back()。向量已经包含一些值。

我试图创建实例而不是像这样直接做

string is = to_string(y);
some_vector.push_back(is.c_str());
Run Code Online (Sandbox Code Playgroud)

我在做

string is = to_string(y);
const char * temp = is.c_str();
some_vector.push_back(temp);
Run Code Online (Sandbox Code Playgroud)

我的完整代码是

vector<const char *> TimeConstraint; 
for (int i = 1; i <= 10; i++)
    {
        const char * tx = TimeConstraint.back();

        int y;
        stringstream strval;

        strval << tx;
        strval >> y;

        y = y + 40;

        string is = to_string(y);
        const char* temp_pointer = is.c_str();
        TimeConstraint.push_back(temp_pointer);


    } 
Run Code Online (Sandbox Code Playgroud)

新值未添加到TimeConstraint向量中

每次我必须push_back()时向量的最后一个元素的增量值。请帮助我,谢谢

c++

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