标签: stdvector

使用std :: map而不是vector <pair <string,string >>>我会看到性能提升吗?

我目前有一些代码,我使用的vector是pair<string,string>.这用于存储来自XML解析的一些数据,因此,该过程在某些地方非常慢.在试图加快整个过程中,我想知道是否有将是从交换任何性能方面的优势vector<pair<string,string> >来std::map<string,string>?我可以编写代码并运行一个分析器,但我想我会看到我是否能得到一个答案,表明首先会有一些明显的性能提升.我不需要进行任何排序,我只是将项添加到向量中,然后在稍后阶段迭代内容并进行一些处理 - 我不需要排序或任何这种性质.我猜也许我不会获得任何性能提升,但我从来没有真正使用过std::map,所以我不知道没有要求或编码全部.

c++ stl stdmap stdvector

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

C++:如何检测vector <string>中的重复项并打印一份副本?

我是C++的新手.我想知道如何在向量中找到重复的字符串并打印出该字符串的一个副本.例如,如果我有<"猫","狗","狗","鸟",>它会打印出猫,狗,鸟.我已经对我的向量进行了排序,并使用了adjacent_find函数并迭代了向量(因为我必须找到是否有任何单词重复).我的代码检测到重复,但它只打印出非重复的代码.我想改变它以打印出所有非重复项,也只打印其中一个重复项,因此矢量中的所有字符串都会打印出来.这是我到目前为止的代码:

public: void print(vector<string> in) // print method for printing a vector and it's key
{ 

  sort(in.begin(), in.end()); // sort the vector alphabetically first

  vector<string>::iterator it; 

      for( it = in.begin(); it != in.end(); it++ ) // iterate through it


             if(adjacent_find(in.begin(), in.end()) == in.end()) // don't print duplicates


             cout << *it<<endl; // and print out each string in the vector
}
Run Code Online (Sandbox Code Playgroud)

c++ duplicates stdvector

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

std :: vector内存分配问题

我在尝试删除指针向量时遇到问题:

std::vector<float*> *v;

v = new std::vector<float*>;
v->assign(2, new float[2]);

for (int i = 0; i < 2; ++i)
{
    delete[] v->at(i);
}
delete v;
Run Code Online (Sandbox Code Playgroud)

我正在删除整个向量中的每个元素,但我仍然得到一个断言.你能告诉我我做错了什么吗?

先感谢您.

c++ memory memory-management stl stdvector

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

如何在不复制的情况下从C数组构造std :: vector或boost ::数组?

给定一个char数组的指针,是否可以从中构造一个std :: vector或boost :: array,并避免内存复制?

提前致谢!

c++ arrays boost stdvector

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

为什么使用std :: vector容器创建std :: queue不会引发编译器错误

为什么std::queue用std::vector容器创建不会引起编译器错误?

只有在调用pop时才会出现编译器错误(这很明显,因为vector不提供pop_front()).

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main()
{
    queue<int, vector<int>> s;

    s.push(10);

    cout << s.front() << endl;

    s.pop();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

c++ queue stl stdvector

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

使用push_back将向量<double>放入向量<vector <double >>

我有一个std::vector<vector<double>>我想填写一个功能.我需要在我的程序中稍后为某些计算存储一些3维坐标.

我的问题是如果我这样做:

//in classdefinition
std::vector<std::vector<double>> data;

    myFunc()
    {
        std::vector<double> temp;
        temp.push_back(1);
        temp.push_back(2);
        temp.push_back(3);
        data.push_back(temp);

        temp.clear();
        //new data
        temp.push_back(2);
        temp.push_back(3);
        temp.push_back(4);
        data.push_back(temp);
    }
Run Code Online (Sandbox Code Playgroud)

清除和重新填充temp会影响数据中的值吗?

我已经找到了这个http://www.cplusplus.com/reference/vector/vector/push_back/, 但由于解释是"将val的内容复制(或移动)到新元素." 我不知道该怎么想.对我来说,这听起来像是一个矛盾.

我认为如果变量作为参考传递是没有多大意义的,因为它们可以像我的情况一样只在有限的范围内有效.我的假设是对的吗?

c++ stdvector

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

矢量大小不会随着变量的增加而增加

我有以下脚本在特定基础中创建所有可能的点:

int main(){

  int base;
  cout << "Enter Base: ";
  cin >> base;

  int dimension;
  cout << "Enter Dimension: ";
  cin >> dimension;

  //This creates all possible numbers
  vector<double> dist;
  dist.reserve(base);
  for(int k=0; k<base; k++){
    dist[k] = (-1.0+k*2.0/(base-1.0));
  }

  vector< vector<double> > points;
  int perms = 1;
  for(int i=0; i<dimension; i++){
    perms *= base;
  } // base^dimension
  points.reserve(perms);

  vector<double> stand;
  stand.reserve(dimension);

  // Defined later
  getPermutations(dist, base, stand, dimension, 0, points);

  for(int i=0; i<points.size(); i++){ //DOESN'T DO ANYTHING BECAUSE SIZE IS …
Run Code Online (Sandbox Code Playgroud)

c++ size vector stdvector

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

如何设置一个std :: vector与另一个,其中两个是不同类的向量?

有没有办法用另一个设置std :: vector,其中两个是不同类的向量?

struct A {
   int a;
};

struct B {
   int a, b;
   B(int _a, int _b) : a(_a), b(_b) {}
};

int commonB = 123;

std::vector<A> va;
std::vector<B> vb;

// Fill va...

// Code I would like to optimise:
for(size_t i = 0; i < va.size(); ++i) {
    vb.push_back(B(va[i].a, commonB));
}
Run Code Online (Sandbox Code Playgroud)

像(伪代码)一样:

vb = va;
Run Code Online (Sandbox Code Playgroud)

B :: b值未初始化?

c++ initialization stdvector

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

嵌套的 for_each 循环导致向量大小意外增加

我有以下一段代码,用于将二维数组转换为一维向量。数组使用 std::vector 分配,嵌套的 for_each 循环用于将二维数组的内容传输到一维数组。

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdexcept>
#define UNUSED(expr) (void)(expr)

using usll = __uint64_t;

void print1d(std::vector<double> vv);
void matToVect1d(const std::vector<std::vector<double>>& v2d, std::vector<double>& v1d);
void matToVect1dEx(const std::vector<std::vector<double>>& v2d, std::vector<double>& v1d);

int main(int argc, char* argv[])
{
    UNUSED(argc);
    UNUSED(argv);

    std::cout << std::endl;

    const usll DIM0 {10};
    const usll DIM1 {8};

    std::vector<std::vector<double>> data2d(DIM0, std::vector<double>(DIM1));
    std::vector<double> data1d(DIM0 * DIM1);
    double temp = 0.0;

    for (usll i{}; i<DIM0; ++i)
    {
        for (usll j{}; j<DIM1; ++j)
        {
            data2d[i][j] = temp++; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays algorithm stdvector c++17

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

对几乎相同的代码执行不同的向量求和

使用g++flag编译时,这些对数组和向量求和的函数之间似乎存在性能差异-O3:

float sum1(float* v, int length) {
    float sum = 0;
    for(int i = 0; i < length; i++) {
        sum += v[i];
    }
    return sum;
}

float sum2(std::vector<float> v) {
    return sum1(&v[0], v.size());
}
Run Code Online (Sandbox Code Playgroud)

当sum1使用例如长度为 100000 和sum2具有相同长度和内容的向量调用时,sum2最终大约为。比sum1我的测试慢 10% 。测量的运行时间是:

sum1: 0.279816 ms
sum2: 0.307811 ms
Run Code Online (Sandbox Code Playgroud)

现在这个开销从何而来?附加您还可以找到我在那里犯错误的可能性的完整测试代码。

[更新]通过引用 ( float sum2(std::vector<float>& v))调用时,性能差异约为 . 还剩下 3.7%,所以这会有所帮助,但在其他地方仍有一些性能损失?

[更新 2]其余的似乎在统计上占主导地位,从更多的迭代中可以看出。因此,唯一的问题确实是通过引用调用!


完整的测试代码(编译标志-O3与g++,也与测试clang++):

sum1: …
Run Code Online (Sandbox Code Playgroud)

c++ arrays performance vector stdvector

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