javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

spring-mvc

reflection

javascript-objects

html5

analytics

node.js

performance

branch-prediction

git-commit

git-revert

c ++-标准对如何在向量上调用clear改变容量有何看法?

该网站暗示清除媒介可能会改变容量:

[HTTP://恩.CPP reference.com/我/CPP/container/vector/clear]

许多实现不会在调用后释放分配的内存 清除(),有效地保留向量的容量() 不变。

但是根据@JamesKanze所说,这是错误的,明确的标准要求不会改变容量。

标准怎么说?

trans by 2020-08-12T07:15:01Z

C ++-恒定大小

有人知道定义恒定大小矢量的方法吗?

例如,代替定义

std::vector<int>

这将是

std::vector<10, int>

它应该是完全跨平台的。 也许是开源类?

trans by 2020-08-09T20:08:09Z

java-向量与ArrayList哪个更好?

可能重复:
为什么Java Vector类被视为过时或过时的?

哪种类型更好使用,以及如何选择正确的类型(内存使用,执行...)?

trans by 2020-08-06T22:47:34Z

数学-使用atan2查找两个向量之间的角度

我明白那个:

atan2(vector.y, vector.x) =矢量和X轴之间的角度。

但是我想知道如何使用atan2获取两个向量之间的角度。 所以我遇到了这个解决方案:

atan2(vector1.y - vector2.y, vector1.x - vector2.x)

我的问题很简单:

以下两个公式会产生相同的数字吗?

  • atan2(vector2.y - vector1.y, vector2.x - vector1.x)

  • atan2(vector2.y - vector1.y, vector2.x - vector1.x)

如果不是:我如何知道减法中首先出现的向量?

trans by 2020-08-05T05:06:10Z

C ++-使用C ++ 11 for()循环遍历vector <unique_ptr <mytype >>

我有以下一批代码:

std::vector<std::unique_ptr<AVLTree_GeeksforGeeks>> AVLArray(100000);

/* Let's add some objects in the vector */
AVLTree_GeeksforGeeks *avl = new AVLTree_GeeksforGeeks();
avl->Insert[2]; avl->Insert[5]; AVL->Insert[0];
unique_ptr<AVLTree_GeeksforGeeks> unique_p(avl);
AVLArray[0] = move(unique_p);
/* we do this for a number of other trees, let's say another 9...
...
...
Now the vector has objects up until AVLTree[9] */

/* Let's try iterating through its valid, filled positions */
for(auto i : AVLTree )
{
   cout << "Hey there!\n";    //This loop should print 10 "Hey there"s.
}

h 在for()循环的最后部分出现编译错误。

\DataStructures2013_2014\main.cpp||In function 'int main()':|
\DataStructures2013_2014\main.cpp|158|error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = AVLTree_GeeksforGeeks; _Dp = std::default_delete<AVLTree_GeeksforGeeks>; std::unique_ptr<_Tp, _Dp> = std::unique_ptr<AVLTree_GeeksforGeeks>]'|
e:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\unique_ptr.h|256|error: declared here|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

关于我在做什么错的任何想法吗?

trans by 2020-08-05T01:50:00Z

C ++-最佳追加方式

这个问题已经在这里有了答案:

  • 将向量附加到向量[重复] 4个答案
std::vector<int> a;
std::vector<int> b;
std::vector<int> c;

我想通过将std::moveC++11的元素添加到a来串联这三个向量,这是最好的方法,为什么?


1)使用std::move

a.reserve(a.size() + b.size() + c.size());
a.insert(a.end(), b.begin(), b.end());
a.insert(a.end(), c.begin(), c.end());
b.clear();
c.clear();

2)使用std::move

a.reserve(a.size() + b.size() + c.size());
std::copy(b.begin(), b.end(), std::inserter(a, a.end()));
std::copy(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();

3)使用std::move(来自C++11):

a.reserve(a.size() + b.size() + c.size());
std::move(b.begin(), b.end(), std::inserter(a, a.end()));
std::move(c.begin(), c.end(), std::inserter(a, a.end()));
b.clear();
c.clear();
trans by 2020-08-04T21:11:51Z

向量C ++上的记忆集

C ++中的矢量有clear()的等效功能吗?

(不是2988402720832832488448或2988402720832488488449方法,我想保留向量的大小,我只想初始化所有值。)

trans by 2020-07-29T22:06:32Z

r-将数据框的两列转换为已命名

我需要将多行两列data.frame转换为命名字符向量。我的data.frame应该是这样的:

dd = data.frame(crit = c("a","b","c","d"), 
                name = c("Alpha", "Beta", "Caesar", "Doris")
                )

而我真正需要的是:

whatiwant = c("a" = "Alpha",
              "b" = "Beta",
              "c" = "Caesar",
              "d" = "Doris")
trans by 2020-07-29T09:16:36Z

算法-欧几里得距离vs皮尔逊相关vs余弦相似度?

他们的目标都是相同的:找到相似的向量。您在哪种情况下使用哪个? (有实际例子吗?)

trans by 2020-07-28T17:00:58Z

C ++-未初始化向量<int>的值

从这个问题的答案中我了解到,未初始化的int全局/静态值将为0。这个答案表明,对于向量,将调用对象类型的默认构造函数。

我无法弄清楚-在本地函数中有vector<int> v(10)时会发生什么。 int的默认构造函数是什么? 如果我在全球范围内声明了vector<int> v(10),该怎么办?

我看到的是,本地函数中的vector<int> v(10)导致变量为0-但我不确定这是仅由于我的编译器还是固定的预期行为。

trans by 2020-07-26T22:38:19Z

插入到向量中的前面

iterator insert ( iterator position, const T& x );

std::Vector类的插入运算符的函数声明。

该函数的返回类型是指向插入元素的迭代器。 我的问题是,考虑到这种返回类型,一开始插入的最有效方法是什么(这是我正在运行的大型程序的一部分,其中速度是至关重要的,所以我正在寻找计算效率最高的方法)。 是下面吗?

//Code 1
vector<int> intvector;
vector<int>::iterator it;
it = myvector.begin();
for(int i = 1; i <= 100000; i++){
    it = intvector.insert(it,i);
}

要么,

//Code 2
vector<int> intvector;
for(int i = 1; i <= 100000; i++){
    intvector.insert(intvector.begin(),i);
}

本质上,在代码2中,参数是

intvector.begin() 

与在代码1中使用返回的迭代器相比,“按成本计算”进行计算评估还是应该两者都同样便宜/昂贵?

trans by 2020-07-26T16:42:36Z

C ++ std :: vector emplace vs ins

这个问题已经在这里有了答案:

  • push_back和emplace_back 6个答案

我想知道两者之间有什么区别。 我注意到emplace是c ++ 11的加法。 那么为什么要加法呢?

trans by 2020-07-26T04:43:24Z

为什么C ++ 11从std :: vector填充构造函数的原型中删除默认值?

在C ++ 98中,用于clang++ -std=c++11的fill构造函数的原型具有初始化程序的默认值。

explicit vector (size_type n, const value_type& val = value_type(),
                 const allocator_type& alloc = allocator_type());

C ++ 11使用两个原型。

explicit vector (size_type n);
         vector (size_type n, const value_type& val,
                 const allocator_type& alloc = allocator_type());

(在C ++ 14中,填充构造函数再次更改,但这不是这个问题的重点。)

参考链接在这里。

为什么C ++ 11不赞成使用默认的初始化值clang++ -std=c++11

顺便说一句,我尝试使用clang++ -std=c++11编译以下代码,并发出错误,这意味着值类型仍需要具有默认构造函数(如S() {}),即默认可构造的。

#include <vector>

struct S {
    int k;
    S(int k) : k(k) {} // intentionally remove the synthesized default constructor
};

int main() {
    std::vector<S> s(5); // error: no matching constructor
}
trans by 2020-07-25T23:23:56Z

R:删除最后一个元素

如何删除动物园系列的最后100个元素?

我知道名称[-element]表示法但我无法减去一个完整的部分

trans by 2020-07-24T20:11:46Z

将迭代器转换为指针?

我有一个findunordered_set<std::vector*>元素。 现在,我需要将指针传递给具有最后n-1个元素的向量。

例如,我的find包含unordered_set<std::vector*>。一个函数需要n-1,我想将其传递给foo的指针。

我可以(安全地)使用迭代器find,将其转换为指针并将其传递给函数吗? 还是使用unordered_set<std::vector*>

更新:人们建议我将函数更改为采用迭代器而不是指针。 在我的情况下,这似乎是不可能的,因为我提到的函数是unordered_set<std::vector*>find函数。那么在这种情况下,是将foo中的n-1个元素复制到一个新的向量中,并使用指向该唯一选项的指针调用find吗? 效率很低! 就像画家Shlemiel一样,尤其是因为我必须查询许多子集:最后的n-1,然后是n-2等元素,然后查看它们是否在unordered_set中。

trans by 2020-07-24T03:24:29Z

我可以使用'=='比较两个向量。 我尝试了一下,似乎工作正常。 但我不知道它是否可以在更复杂的情况下工作

第一个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 30, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns equal 

第二个例子:

int main(){
    using namespace std;   
    vector<int> v1{10, 20, 30, 40, 50};
    vector<int> v2{10, 20, 100000, 40, 50};

    if(v1==v2)
        cout<<"equal";
    else
        cout<<"unequal";
}   // it returns notequal 
trans by 2020-07-21T17:18:53Z

调用std :: vector :: clear()会将std :: vector :: capacity()设置为零吗?

如果我在矢量上使用.reserve(items),则矢量将为我对所需物品数量的猜测分配足够的内存。

如果我以后使用.clear(),那会清除该向量还是保存我之前定义的储备?

谢谢。

trans by 2020-07-13T17:55:13Z

如何更改C ++ STL的特定元素

vector<int> l;
for(int i=1;i<=10;i++){
   l.push_back(i);
}

现在,例如,如何将向量的l.at(i)更改为-1

我尝试了l.at(i)它的行为不符合预期。 其他矢量方法似乎都不适合。

我使用了vector,因为我需要在代码中使用随机访问功能(使用l.at(i))。

trans by 2020-07-12T22:11:37Z

gcc-C ++将元素从函数的返回值存储到std :: vector中时出现意外结果

当函数涉及重新分配时,我发现某些编译器可能会在函数调用之前保存地址。 它导致返回值存储在无效地址中。

在上面的描述中有一个示例来解释行为。

#include <stdio.h>
#include <vector> 
using namespace std;

vector<int> A; 
int func() { 
    A.push_back(3);
    A.push_back(4);
    return 5; 
} 
int main() { 
    A.reserve(2);
    A.push_back(0);
    A.push_back(1);
    A[1] = func();
    printf("%d\n", A[1]);
    return 0;
}

有一些常见的C ++编译器,测试结果如下。

  • GCC(GNU编译器集合):运行时错误或输出5
  • lang声:输出5
  • VC ++:输出5

它是未定义的行为吗?

trans by 2020-07-10T17:31:28Z

stl-*不*初始化其成员的C ++向量?

我正在为一段返回大型数组的C代码制作C ++包装程序,因此我尝试在vector中返回数据。

现在的问题是,数据量约为兆字节,并且vector不必要地初始化了其存储,这实际上导致速度降低了一半。

我该如何预防?

或者,如果不可能的话,是否还有其他STL容器可以避免这种不必要的工作? 还是我必须自己制造一个容器?

(对于C ++ 11)

注意:

我将向量作为输出缓冲区传递。 我不是从其他地方复制数据。
就像这样:

vector<unsigned char> buf(size);   // Why initialize??
GetMyDataFromC(&buf[0], buf.size());
trans by 2020-07-08T09:00:21Z

1 2 3 4 5 6 7 8 下一页 共8页