小编Ami*_*ory的帖子

为什么std :: basic_string :: substr不遵循[begin,end]约定?

该方法std::basic_string::substr具有参数pos, count,指定位置[pos,pos + count + 1]中元素的逻辑范围.相反,大多数标准库函数(例如std::for_each)都有一些类似的参数begin, end,指定范围[begin,end]

这似乎是一个例外,然后,让一些人感到困惑(请参阅此处,此处,此处此处的问题).为什么这里没有采用通常的范围惯例?std::vector::erase另请注意,另一个随机访问容器的方法确实遵循通常的惯例.

c++ string range substr

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

函数调用改变了它的参数

我有以下代码:

#include <iostream>

using namespace std;

template <class T>
class Iterator;

template <class T>
class List;

template <class T>
class List {
    public:
        struct Node;
        Node* first;
        friend class Iterator<T>;

        List() :
            first(NULL) { }

        Iterator<T> begin() {
            cout << first->data << endl;
            return Iterator<T>(*this, first); // <--- problematic call
        }

        void insert(const T& data) {
            Node newNode(data, NULL);
            first = &newNode;
        }
};

template <class T>
struct List<T>::Node {
    private:
        T data;
        Node* next;

        friend class List<T>;
        friend class …
Run Code Online (Sandbox Code Playgroud)

c++

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

当f(n)为负时,主定理如何应用?

试图解决这个递归:

T(n) = 4T(n/2) + 2500 - sqrt(n)
here a = 4, b=2 but my f(n) = 2500 -sqrt(n) 
n^ logb(a) = n ^ log2 (4) = n ^2 
Run Code Online (Sandbox Code Playgroud)

但f(n)是常数-sqrt(n)

我的问题:

  1. 我可以假设f(n)= Theta(sqrt n)或者我应该知道一些技巧吗?

  2. 此外,当你在它时,如果你能解释是否有一个常数减去sqrt(n)即减号有什么意义?或者它可以忽略.

这真让我抓狂!请帮忙!谢谢!!

recursion divide-and-conquer master-theorem

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

堆排序:为什么第 2 层到最后一层的最右侧节点位于索引 n/2-1?

我正在研究用于堆排序的 BST 树。

void heapSort(int arr[], int n){
// Build heap (rearrange array)
for (int i = n / 2 - 1; i >= 0; i--)
    heapify(arr, n, i);  
     -----------
     ----------
}
Run Code Online (Sandbox Code Playgroud)

它表明,树的第 2 个最后一级索引的最右边节点总是n/2-1

最大堆

请谁能告诉我简单的数学证明。谢谢

algorithm tree binary-heap heapsort

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

使用 Dijkstra 的最大概率路径

我已经使用 dijkstra 算法为双向图中的最短路径制作了这个程序。能否将此算法转换为程序以查找图中最长的路径。

#include<bits/stdc++.h>
using namespace std;

#define mp make_pair
#define ft first
#define sd second

vector< pair<long long int,long long int> > g[101000];
long long int n,m;
vector<long long int> dist;
vector <long long int> vis;

void dijkstra(long long int source,long long int l)
{
    dist.clear();
    long long int i,j,k;
    for(i=0;i<n;i++)
    {
        dist.push_back(INT_MAX);
        vis.push_back(0);
    }
    dist[source] = 0;
    set< pair<long long int,long long int> > s; // pair is dist, node_number
    set< pair<long long int,long long int> >::iterator it; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm graph probability dijkstra

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

为什么骑士不能覆盖所有桌子?

我希望骑士开始(1,1)并试图在桌子上移动.这是我的代码:

canMove :: (Int  -> Int) -> (Int  -> Int) -> [(Int,Int)] -> Bool

canMove (x) (y) list 
        | (x (fst lastMove),y (snd lastMove)) `elem` list = False
        | newX> 8 || newY> 8 || newX<=0 || newY<=0 = False
        | otherwise = True
        where lastMove = last list
              newX = x (fst lastMove)
              newY = y (snd lastMove)

move :: [(Int, Int)] -> [( Int, Int)]
move list 
  | length list == 64 = list
  | canMove …
Run Code Online (Sandbox Code Playgroud)

algorithm haskell

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