标签: stdvector

std :: dynarray vs std :: vector

C++ 14提出std::dynarray:

std :: dynarray是一个序列容器,它封装了一个在构造时固定的大小的数组,并且在整个对象的生命周期内不会改变.

std::dynarray必须在运行时分配,如同std::vector.

那么std::dynarray我们可以使用std::vector哪些更有活力(又重新调整大小)的好处和用途是什么?

c++ stdvector

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

vector :: at vs. vector :: operator []

我知道这at()[]它的边界检查慢,这也在类似的问题中讨论,如C++ Vector at/[] operator speed:: std :: vector :: at()vs operator [] << Surprising results !! 速度慢5到10倍!.我只是不明白这种at()方法有什么用处.

如果我有一个像这样的简单向量:std::vector<int> v(10);我决定通过使用at()而不是[]在我有索引的情况下访问它的元素i并且我不确定它是否在向量范围内,它迫使我用try-catch包装它块:

try
{
    v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

虽然我能够通过自己使用size()和检查索引来获得相同的行为,这对我来说似乎更容易和方便:

if (i < v.size())
    v[i] = 2;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:
使用vector :: at over vector :: operator []有什么好处?
我什么时候应该使用vector :: at而不是vector :: size …

c++ stl stdvector

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

在c ++中返回std :: vector的有效方法

在函数中返回std :: vector时复制了多少数据,将std :: vector放在free-store(在堆上)并返回指针的优化程度是多少,即:

std::vector *f()
{
  std::vector *result = new std::vector();
  /*
    Insert elements into result
  */
  return result;
} 
Run Code Online (Sandbox Code Playgroud)

效率高于:

std::vector f()
{
  std::vector result;
  /*
    Insert elements into result
  */
  return result;
} 
Run Code Online (Sandbox Code Playgroud)

c++ return-value stdvector

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

C++:比较两个向量

有没有办法比较两个向量?

if (vector1 == vector2)
    DoSomething();
Run Code Online (Sandbox Code Playgroud)

注意:目前,这些向量未排序并包含整数值.

c++ stdvector

68
推荐指数
4
解决办法
12万
查看次数

在C++中检查std :: vector <string>是否包含某个值

是否有内置函数告诉我我的矢量包含某个元素,例如

std::vector<string> v;
v.push_back("abc");
v.push_back("xyz");

if (v.contains("abc")) // I am looking for one such feature, is there any
                       // such function or i need to loop through whole vector?
Run Code Online (Sandbox Code Playgroud)

c++ vector std stdvector

67
推荐指数
4
解决办法
16万
查看次数

对于任何empty()向量,begin()== end()吗?

我一直认为,对于任何空std::vector V,V.begin() == V.end().然而,我在C++规范中没有看到任何说明这一点始终是真的.它是否一定是真的,或者在大多数实现中是否恰好是真的?

c++ stdvector

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

命名空间'std'中的'vector'没有命名类型

我正在使用Debian 7.0.0上的CodeBlocks 10.05开发一个C++应用程序.

由于某种原因,以下代码

#include <iostream>

std::vector< int > delaunayDiv(const std::vector< int <T> > & vP, cv::Rect boundRect,
    std::vector<int>& triangles, int& numTriangles, bool lookRight);
Run Code Online (Sandbox Code Playgroud)

返回以下错误

error: 'vector' in namespace 'std' does not name a type
Run Code Online (Sandbox Code Playgroud)

c++ std stdvector

60
推荐指数
1
解决办法
8万
查看次数

使用数组向量的正确方法

有人能说出使用数组向量的正确方法是什么?

我声明了一个数组(vector<float[4]>)的向量,但error: conversion from 'int' to non-scalar type 'float [4]' requested在尝试时得到resize了.出了什么问题?

c++ arrays vector stdvector

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

在不复制的情况下在C++ std :: vector和C数组之间进行转换

我希望能够在std :: vector和它的底层C数组int*之间进行转换,而无需显式复制数据.

std :: vector是否提供对底层C数组的访问?我正在寻找这样的东西

vector<int> v (4,100)
int* pv = v.c_array();
Run Code Online (Sandbox Code Playgroud)

编辑:

此外,是否可以进行相反的操作,即如何在std::vector不复制的情况下从C数组初始化?

int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv);
Run Code Online (Sandbox Code Playgroud)

c c++ arrays stl stdvector

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

有没有将范围移动到矢量的标准方法?

考虑以下程序,它将一系列元素插入到向量中:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

v1.insert(v1.end(), v2.begin(), v2.end());
Run Code Online (Sandbox Code Playgroud)

这有效地复制了范围,在整个范围内为目标矢量分配了足够的空间,因此最多需要一个调整大小.现在考虑以下程序尝试将范围移动到向量中:

vector<string> v1;
vector<string> v2;

v1.push_back("one");
v1.push_back("two");
v1.push_back("three");

v2.push_back("four");
v2.push_back("five");
v2.push_back("six");

for_each ( v2.begin(), v2.end(), [&v1]( string & s )
{
    v1.emplace_back(std::move(s));
});
Run Code Online (Sandbox Code Playgroud)

这会执行成功的移动,但不会享受insert()在目标向量中预分配空间方面的优势,因此在操作期间可以多次调整向量的大小.

所以我的问题是,是否有一个插入等效项可以将范围移动到向量中?

c++ insert stdvector c++11

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

标签 统计

c++ ×10

stdvector ×10

arrays ×2

std ×2

stl ×2

vector ×2

c ×1

c++11 ×1

insert ×1

return-value ×1